Module: wine Branch: master Commit: 256977973970d32a051f32752f09e07d00893b22 URL: https://gitlab.winehq.org/wine/wine/-/commit/256977973970d32a051f32752f09e07...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Sep 25 19:13:01 2023 +0200
server: Require ASLR support on non-x86 platforms.
---
server/mapping.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
diff --git a/server/mapping.c b/server/mapping.c index 0a69261c0ee..2d0a0b783e2 100644 --- a/server/mapping.c +++ b/server/mapping.c @@ -726,6 +726,15 @@ static unsigned int get_image_params( struct mapping *mapping, file_pos_t file_s if (!is_machine_32bit( nt.FileHeader.Machine )) return STATUS_INVALID_IMAGE_FORMAT; if (!is_machine_supported( nt.FileHeader.Machine )) return STATUS_INVALID_IMAGE_FORMAT;
+ if (nt.FileHeader.Machine != IMAGE_FILE_MACHINE_I386) /* non-x86 platforms are more strict */ + { + if (nt.opt.hdr32.SectionAlignment & page_mask) + return STATUS_INVALID_IMAGE_FORMAT; + if (!(nt.opt.hdr32.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_NX_COMPAT)) + return STATUS_INVALID_IMAGE_FORMAT; + if (!(nt.opt.hdr32.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE)) + return STATUS_INVALID_IMAGE_FORMAT; + } if (nt.opt.hdr32.NumberOfRvaAndSizes > IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR) { clr_va = nt.opt.hdr32.DataDirectory[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR].VirtualAddress; @@ -760,6 +769,15 @@ static unsigned int get_image_params( struct mapping *mapping, file_pos_t file_s if (!is_machine_64bit( nt.FileHeader.Machine )) return STATUS_INVALID_IMAGE_FORMAT; if (!is_machine_supported( nt.FileHeader.Machine )) return STATUS_INVALID_IMAGE_FORMAT;
+ if (nt.FileHeader.Machine != IMAGE_FILE_MACHINE_AMD64) /* non-x86 platforms are more strict */ + { + if (nt.opt.hdr64.SectionAlignment & page_mask) + return STATUS_INVALID_IMAGE_FORMAT; + if (!(nt.opt.hdr64.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_NX_COMPAT)) + return STATUS_INVALID_IMAGE_FORMAT; + if (!(nt.opt.hdr64.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE)) + return STATUS_INVALID_IMAGE_FORMAT; + } if (nt.opt.hdr64.NumberOfRvaAndSizes > IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR) { clr_va = nt.opt.hdr64.DataDirectory[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR].VirtualAddress;