[PATCH v2 0/1] MR3298: ntdll: Test against the correct limit in get_extended_params().
This fixes the ntdll:virtual tests on WoW64. -- v2: ntdll: Test against the correct limit in get_extended_params(). https://gitlab.winehq.org/wine/wine/-/merge_requests/3298
From: Sven Baars <sbaars(a)codeweavers.com> --- dlls/ntdll/unix/virtual.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c index 21b4e9b4dba..392ac4d9966 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c @@ -4353,6 +4353,10 @@ static NTSTATUS get_extended_params( const MEM_EXTENDED_PARAMETER *parameters, U case MemExtendedParameterAddressRequirements: { MEM_ADDRESS_REQUIREMENTS *r = parameters[i].Pointer; + ULONG_PTR limit; + + if (is_wow64()) limit = (ULONG_PTR)get_wow_user_space_limit(); + else limit = (ULONG_PTR)user_space_limit; if (r->Alignment) { @@ -4366,7 +4370,7 @@ static NTSTATUS get_extended_params( const MEM_EXTENDED_PARAMETER *parameters, U if (r->LowestStartingAddress) { *limit_low = (ULONG_PTR)r->LowestStartingAddress; - if (*limit_low >= (ULONG_PTR)user_space_limit || (*limit_low & granularity_mask)) + if (*limit_low >= limit || (*limit_low & granularity_mask)) { WARN( "Invalid limit %p.\n", r->LowestStartingAddress ); return STATUS_INVALID_PARAMETER; @@ -4375,7 +4379,7 @@ static NTSTATUS get_extended_params( const MEM_EXTENDED_PARAMETER *parameters, U if (r->HighestEndingAddress) { *limit_high = (ULONG_PTR)r->HighestEndingAddress; - if (*limit_high > (ULONG_PTR)user_space_limit || + if (*limit_high > limit || *limit_high <= *limit_low || ((*limit_high + 1) & (page_mask - 1))) { -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/3298
participants (2)
-
Sven Baars -
Sven Baars (@sbaars)