Author: cgutman
Date: Mon Dec 26 02:52:26 2011
New Revision: 54761

URL: http://svn.reactos.org/svn/reactos?rev=54761&view=rev
Log:
[NTOSKRNL]
- Don't change page protection while the memory area is being deleted

Modified:
    trunk/reactos/ntoskrnl/mm/anonmem.c
    trunk/reactos/ntoskrnl/mm/marea.c
    trunk/reactos/ntoskrnl/mm/pageop.c

Modified: trunk/reactos/ntoskrnl/mm/anonmem.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/anonmem.c?rev=54761&r1=54760&r2=54761&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/mm/anonmem.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/anonmem.c [iso-8859-1] Mon Dec 26 02:52:26 2011
@@ -495,7 +495,7 @@
 
     MmLockAddressSpace(AddressSpace);
     MemoryArea = MmLocateMemoryAreaByAddress(AddressSpace, *BaseAddress);
-    if (MemoryArea == NULL)
+    if (MemoryArea == NULL || MemoryArea->DeleteInProgress)
     {
         MmUnlockAddressSpace(AddressSpace);
         return STATUS_UNSUCCESSFUL;

Modified: trunk/reactos/ntoskrnl/mm/marea.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/marea.c?rev=54761&r1=54760&r2=54761&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/mm/marea.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/marea.c [iso-8859-1] Mon Dec 26 02:52:26 2011
@@ -781,6 +781,9 @@
        }
     }
 
+    /* There must be no page ops in progress */
+    ASSERT(MemoryArea->PageOpCount == 0);
+
    /* Remove the tree item. */
    {
       if (MemoryArea->Parent != NULL)

Modified: trunk/reactos/ntoskrnl/mm/pageop.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/pageop.c?rev=54761&r1=54760&r2=54761&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/mm/pageop.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/pageop.c [iso-8859-1] Mon Dec 26 02:52:26 2011
@@ -148,6 +148,9 @@
 
    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


Reply via email to