From: Looming Linux tuxway+gitlab@posteo.de
--- dlls/ntdll/unix/virtual.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c index 5bdeef4c1bc..f8fb230f0d6 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c @@ -4392,18 +4392,22 @@ static void virtual_release_address_space(void) */ void virtual_set_large_address_space(void) { + BOOL large_address_aware = main_image_info.ImageCharacteristics & IMAGE_FILE_LARGE_ADDRESS_AWARE; + BOOL dynamic_base = main_image_info.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE; + BOOL high_entropy_va = main_image_info.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA; + if (is_win64) { if (is_wow64()) - user_space_wow_limit = ((main_image_info.ImageCharacteristics & IMAGE_FILE_LARGE_ADDRESS_AWARE) ? limit_4g : limit_2g) - 1; + user_space_wow_limit = (large_address_aware ? limit_4g : limit_2g) - 1; #ifndef __APPLE__ /* don't free the zerofill section on macOS */ - else if (main_image_info.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA) + else if (large_address_aware && dynamic_base && high_entropy_va) free_reserved_memory( 0, (char *)0x7ffe0000 ); #endif } else { - if (!(main_image_info.ImageCharacteristics & IMAGE_FILE_LARGE_ADDRESS_AWARE)) return; + if (!large_address_aware) return; free_reserved_memory( (char *)0x80000000, address_space_limit ); } user_space_limit = working_set_limit = address_space_limit;