diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index c76b669ff75..ca0ef374933 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -140,6 +140,16 @@ typedef ULONG PFN_TYPE, *PPFN_TYPE; PAGE_NOACCESS | \ PAGE_NOCACHE) +#define PAGE_FLAGS_VALID_FOR_SECTION \ + (PAGE_READONLY | \ + PAGE_READWRITE | \ + PAGE_WRITECOPY | \ + PAGE_EXECUTE | \ + PAGE_EXECUTE_READ | \ + PAGE_EXECUTE_READWRITE | \ + PAGE_EXECUTE_WRITECOPY | \ + PAGE_NOACCESS) + #define PAGE_IS_READABLE \ (PAGE_READONLY | \ PAGE_READWRITE | \ diff --git a/reactos/ntoskrnl/mm/anonmem.c b/reactos/ntoskrnl/mm/anonmem.c index b75c6b7e874..30456dc9124 100644 --- a/reactos/ntoskrnl/mm/anonmem.c +++ b/reactos/ntoskrnl/mm/anonmem.c @@ -569,7 +569,7 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, Protect); /* Check for valid protection flags */ - if (!(Protect & PAGE_FLAGS_VALID_FROM_USER_MODE)) + if (!Protect || Protect & ~PAGE_FLAGS_VALID_FROM_USER_MODE) { DPRINT1("Invalid page protection\n"); return STATUS_INVALID_PAGE_PROTECTION; diff --git a/reactos/ntoskrnl/mm/section.c b/reactos/ntoskrnl/mm/section.c index 5c2eb518e40..e09044b44eb 100644 --- a/reactos/ntoskrnl/mm/section.c +++ b/reactos/ntoskrnl/mm/section.c @@ -4538,10 +4538,7 @@ MmMapViewOfSection(IN PVOID SectionObject, ASSERT(Process); - if (!(Protect & (PAGE_READONLY | PAGE_READWRITE | - PAGE_WRITECOPY | PAGE_EXECUTE | - PAGE_EXECUTE_READ | PAGE_EXECUTE_READWRITE | - PAGE_EXECUTE_WRITECOPY | PAGE_NOACCESS))) + if (!Protect || Protect & ~PAGE_FLAGS_VALID_FOR_SECTION) { return STATUS_INVALID_PAGE_PROTECTION; }