[NTOSKRNL]
authorCameron Gutman <aicommander@gmail.com>
Mon, 26 Dec 2011 02:52:26 +0000 (02:52 +0000)
committerCameron Gutman <aicommander@gmail.com>
Mon, 26 Dec 2011 02:52:26 +0000 (02:52 +0000)
- Don't change page protection while the memory area is being deleted

svn path=/trunk/; revision=54761

reactos/ntoskrnl/mm/anonmem.c
reactos/ntoskrnl/mm/marea.c
reactos/ntoskrnl/mm/pageop.c

index a16f653..88ca97b 100644 (file)
@@ -495,7 +495,7 @@ MiProtectVirtualMemory(IN PEPROCESS Process,
 
     MmLockAddressSpace(AddressSpace);
     MemoryArea = MmLocateMemoryAreaByAddress(AddressSpace, *BaseAddress);
-    if (MemoryArea == NULL)
+    if (MemoryArea == NULL || MemoryArea->DeleteInProgress)
     {
         MmUnlockAddressSpace(AddressSpace);
         return STATUS_UNSUCCESSFUL;
index 1b8e3c5..52e1a0f 100644 (file)
@@ -781,6 +781,9 @@ MmFreeMemoryArea(
        }
     }
 
+    /* There must be no page ops in progress */
+    ASSERT(MemoryArea->PageOpCount == 0);
+
    /* Remove the tree item. */
    {
       if (MemoryArea->Parent != NULL)
index 15890ea..fe19e53 100644 (file)
@@ -149,6 +149,9 @@ MmGetPageOp(PMEMORY_AREA MArea, HANDLE Pid, PVOID Address,
    Address = (PVOID)PAGE_ROUND_DOWN(Address);
    Offset = PAGE_ROUND_DOWN(Offset);
 
+   /* Making a page op during marea destruction is illegal */
+   ASSERT(!MArea->DeleteInProgress);
+
    /*
     * Calcuate the hash value for pageop structure
     */