From 37aea079c11a8aa84f4f24273b7e1abf78bca7a0 Mon Sep 17 00:00:00 2001 From: Hartmut Birr Date: Tue, 16 Aug 2005 16:17:47 +0000 Subject: [PATCH] If we delete a page table, we have also to clear the entry in the page directory area explicitly. This may fix parts of bug #710. svn path=/trunk/; revision=17414 --- reactos/ntoskrnl/mm/i386/page.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/mm/i386/page.c b/reactos/ntoskrnl/mm/i386/page.c index f578771d14e..2f6725a76bf 100644 --- a/reactos/ntoskrnl/mm/i386/page.c +++ b/reactos/ntoskrnl/mm/i386/page.c @@ -411,17 +411,18 @@ VOID MmDeletePageTable(PEPROCESS Process, PVOID Address) { ULONGLONG ZeroPde = 0LL; ExfpInterlockedExchange64UL(PAE_ADDR_TO_PDE(Address), &ZeroPde); + MiFlushTlb((PULONG)PAE_ADDR_TO_PDE(Address), PAE_ADDR_TO_PTE(Address)); } else { *(ADDR_TO_PDE(Address)) = 0; + MiFlushTlb(ADDR_TO_PDE(Address), ADDR_TO_PTE(Address)); } if (Address >= MmSystemRangeStart) { KEBUGCHECK(0); // MmGlobalKernelPageDirectory[ADDR_TO_PDE_OFFSET(Address)] = 0; } - MiFlushTlb(NULL, Address); if (Process != NULL && Process != CurrentProcess) { KeDetachProcess(); @@ -455,6 +456,7 @@ VOID MmFreePageTable(PEPROCESS Process, PVOID Address) } Pfn = PAE_PTE_TO_PFN(*(PAE_ADDR_TO_PDE(Address))); ExfpInterlockedExchange64UL(PAE_ADDR_TO_PDE(Address), &ZeroPte); + MiFlushTlb((PULONG)PAE_ADDR_TO_PDE(Address), PAE_ADDR_TO_PTE(Address)); } else { @@ -471,8 +473,8 @@ VOID MmFreePageTable(PEPROCESS Process, PVOID Address) } Pfn = PTE_TO_PFN(*(ADDR_TO_PDE(Address))); *(ADDR_TO_PDE(Address)) = 0; + MiFlushTlb(ADDR_TO_PDE(Address), ADDR_TO_PTE(Address)); } - MiFlushTlb(NULL, Address); if (Address >= MmSystemRangeStart) {