From b7b948cff5b04effd966a3a4e7304294cf43b030 Mon Sep 17 00:00:00 2001 From: Dmitry Gorbachev Date: Wed, 10 Feb 2010 13:56:54 +0000 Subject: [PATCH] Do not crash, use valid kernel PTE. svn path=/trunk/; revision=45555 --- reactos/ntoskrnl/mm/ARM3/hypermap.c | 4 ++-- reactos/ntoskrnl/mm/ARM3/iosup.c | 2 +- reactos/ntoskrnl/mm/ARM3/mdlsup.c | 2 +- reactos/ntoskrnl/mm/ARM3/miarm.h | 2 ++ reactos/ntoskrnl/mm/ARM3/mminit.c | 4 ++-- reactos/ntoskrnl/mm/ARM3/ncache.c | 2 +- reactos/ntoskrnl/mm/ARM3/pagfault.c | 2 +- reactos/ntoskrnl/mm/ARM3/pool.c | 4 ++-- reactos/ntoskrnl/mm/ARM3/procsup.c | 4 ++-- reactos/ntoskrnl/mm/i386/page.c | 2 -- reactos/ntoskrnl/mm/mmdbg.c | 3 ++- reactos/ntoskrnl/mm/mminit.c | 4 ++-- 12 files changed, 18 insertions(+), 17 deletions(-) diff --git a/reactos/ntoskrnl/mm/ARM3/hypermap.c b/reactos/ntoskrnl/mm/ARM3/hypermap.c index 29d44893e5d..80f371620a0 100644 --- a/reactos/ntoskrnl/mm/ARM3/hypermap.c +++ b/reactos/ntoskrnl/mm/ARM3/hypermap.c @@ -45,7 +45,7 @@ MiMapPageInHyperSpace(IN PEPROCESS Process, // // Build the PTE // - TempPte = HyperTemplatePte; + TempPte = ValidKernelPte; TempPte.u.Hard.PageFrameNumber = Page; MI_MAKE_LOCAL_PAGE(&TempPte); // Hyperspace is local! @@ -157,7 +157,7 @@ MiMapPagesToZeroInHyperSpace(IN PMMPFN *Pages, // Write the current PTE // PointerPte += (Offset + 1); - TempPte = HyperTemplatePte; + TempPte = ValidKernelPte; MI_MAKE_LOCAL_PAGE(&TempPte); // Hyperspace is local! do { diff --git a/reactos/ntoskrnl/mm/ARM3/iosup.c b/reactos/ntoskrnl/mm/ARM3/iosup.c index 7ea829711c3..1a174509382 100644 --- a/reactos/ntoskrnl/mm/ARM3/iosup.c +++ b/reactos/ntoskrnl/mm/ARM3/iosup.c @@ -122,7 +122,7 @@ MmMapIoSpace(IN PHYSICAL_ADDRESS PhysicalAddress, // // Get the template and configure caching // - TempPte = HyperTemplatePte; + TempPte = ValidKernelPte; switch (CacheAttribute) { case MiNonCached: diff --git a/reactos/ntoskrnl/mm/ARM3/mdlsup.c b/reactos/ntoskrnl/mm/ARM3/mdlsup.c index f1953bafffe..a757d9eac95 100644 --- a/reactos/ntoskrnl/mm/ARM3/mdlsup.c +++ b/reactos/ntoskrnl/mm/ARM3/mdlsup.c @@ -372,7 +372,7 @@ MmMapLockedPagesSpecifyCache(IN PMDL Mdl, // // Get the template // - TempPte = HyperTemplatePte; + TempPte = ValidKernelPte; switch (CacheAttribute) { case MiNonCached: diff --git a/reactos/ntoskrnl/mm/ARM3/miarm.h b/reactos/ntoskrnl/mm/ARM3/miarm.h index a0d7befcedd..77e7847a204 100644 --- a/reactos/ntoskrnl/mm/ARM3/miarm.h +++ b/reactos/ntoskrnl/mm/ARM3/miarm.h @@ -127,6 +127,8 @@ typedef struct _PHYSICAL_MEMORY_DESCRIPTOR } PHYSICAL_MEMORY_DESCRIPTOR, *PPHYSICAL_MEMORY_DESCRIPTOR; extern MMPTE HyperTemplatePte; +extern MMPTE ValidKernelPde; +extern MMPTE ValidKernelPte; extern ULONG MmSizeOfNonPagedPoolInBytes; extern ULONG MmMaximumNonPagedPoolInBytes; diff --git a/reactos/ntoskrnl/mm/ARM3/mminit.c b/reactos/ntoskrnl/mm/ARM3/mminit.c index 21f666c81c3..ea1a60fd040 100644 --- a/reactos/ntoskrnl/mm/ARM3/mminit.c +++ b/reactos/ntoskrnl/mm/ARM3/mminit.c @@ -442,7 +442,7 @@ NTAPI MiBuildPagedPool(VOID) { PMMPTE PointerPte, PointerPde; - MMPTE TempPte = HyperTemplatePte; + MMPTE TempPte = ValidKernelPte; PFN_NUMBER PageFrameIndex; KIRQL OldIrql; ULONG Size, BitMapSize; @@ -467,7 +467,7 @@ MiBuildPagedPool(VOID) // page directory array in the old ReactOS Mm is used (but in a less hacky // way). // - TempPte = HyperTemplatePte; + TempPte = ValidKernelPte; TempPte.u.Hard.PageFrameNumber = MmSystemPageDirectory; ASSERT(PointerPte->u.Hard.Valid == 0); ASSERT(TempPte.u.Hard.Valid == 1); diff --git a/reactos/ntoskrnl/mm/ARM3/ncache.c b/reactos/ntoskrnl/mm/ARM3/ncache.c index 7979d391847..659811dc57b 100644 --- a/reactos/ntoskrnl/mm/ARM3/ncache.c +++ b/reactos/ntoskrnl/mm/ARM3/ncache.c @@ -108,7 +108,7 @@ MmAllocateNonCachedMemory(IN ULONG NumberOfBytes) // // Setup the template PTE // - TempPte = HyperTemplatePte; + TempPte = ValidKernelPte; // // Now check what kind of caching we should use diff --git a/reactos/ntoskrnl/mm/ARM3/pagfault.c b/reactos/ntoskrnl/mm/ARM3/pagfault.c index f4d9cd7ed92..f1422f88079 100644 --- a/reactos/ntoskrnl/mm/ARM3/pagfault.c +++ b/reactos/ntoskrnl/mm/ARM3/pagfault.c @@ -113,7 +113,7 @@ MiResolveDemandZeroFault(IN PVOID Address, // // Build the PTE // - TempPte = HyperTemplatePte; + TempPte = ValidKernelPte; TempPte.u.Hard.PageFrameNumber = PageFrameNumber; *PointerPte = TempPte; ASSERT(PointerPte->u.Hard.Valid == 1); diff --git a/reactos/ntoskrnl/mm/ARM3/pool.c b/reactos/ntoskrnl/mm/ARM3/pool.c index bfb75dfe3e7..0d341a8a58f 100644 --- a/reactos/ntoskrnl/mm/ARM3/pool.c +++ b/reactos/ntoskrnl/mm/ARM3/pool.c @@ -213,7 +213,7 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType, // // Get the template PTE we'll use to expand // - TempPte = HyperTemplatePte; + TempPte = ValidKernelPte; // // Get the first PTE in expansion space @@ -493,7 +493,7 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType, // // Loop the pages // - TempPte = HyperTemplatePte; + TempPte = ValidKernelPte; do { // diff --git a/reactos/ntoskrnl/mm/ARM3/procsup.c b/reactos/ntoskrnl/mm/ARM3/procsup.c index 1d575460d87..a2f215a2065 100644 --- a/reactos/ntoskrnl/mm/ARM3/procsup.c +++ b/reactos/ntoskrnl/mm/ARM3/procsup.c @@ -134,7 +134,7 @@ MmCreateKernelStack(IN BOOLEAN GuiStack, // // Setup the template stack PTE // - TempPte = HyperTemplatePte; + TempPte = ValidKernelPte; MI_MAKE_LOCAL_PAGE(&TempPte); MI_MAKE_DIRTY_PAGE(&TempPte); TempPte.u.Hard.PageFrameNumber = 0; @@ -234,7 +234,7 @@ MmGrowKernelStackEx(IN PVOID StackPointer, // // Setup the template stack PTE // - TempPte = HyperTemplatePte; + TempPte = ValidKernelPte; MI_MAKE_LOCAL_PAGE(&TempPte); MI_MAKE_DIRTY_PAGE(&TempPte); TempPte.u.Hard.PageFrameNumber = 0; diff --git a/reactos/ntoskrnl/mm/i386/page.c b/reactos/ntoskrnl/mm/i386/page.c index cb075b0f2fc..c9cdf64412e 100644 --- a/reactos/ntoskrnl/mm/i386/page.c +++ b/reactos/ntoskrnl/mm/i386/page.c @@ -1000,8 +1000,6 @@ MmUpdatePageDir(PEPROCESS Process, PVOID Address, ULONG Size) } } -extern MMPTE HyperTemplatePte; - VOID INIT_FUNCTION NTAPI diff --git a/reactos/ntoskrnl/mm/mmdbg.c b/reactos/ntoskrnl/mm/mmdbg.c index 65f9ebc7f47..fd11099e1fd 100644 --- a/reactos/ntoskrnl/mm/mmdbg.c +++ b/reactos/ntoskrnl/mm/mmdbg.c @@ -35,6 +35,7 @@ NTAPI MiDbgTranslatePhysicalAddress(IN ULONG64 PhysicalAddress, IN ULONG Flags) { + extern MMPTE ValidKernelPte; PFN_NUMBER Pfn; MMPTE TempPte; PVOID MappingBaseAddress; @@ -77,7 +78,7 @@ MiDbgTranslatePhysicalAddress(IN ULONG64 PhysicalAddress, // // // - TempPte = HyperTemplatePte; + TempPte = ValidKernelPte; // // Convert physical address to PFN diff --git a/reactos/ntoskrnl/mm/mminit.c b/reactos/ntoskrnl/mm/mminit.c index 5e21ad6f2d0..7ac2247df65 100644 --- a/reactos/ntoskrnl/mm/mminit.c +++ b/reactos/ntoskrnl/mm/mminit.c @@ -354,9 +354,9 @@ NTAPI MmInitSystem(IN ULONG Phase, IN PLOADER_PARAMETER_BLOCK LoaderBlock) { - extern MMPTE HyperTemplatePte; + extern MMPTE ValidKernelPte; PMMPTE PointerPte; - MMPTE TempPte = HyperTemplatePte; + MMPTE TempPte = ValidKernelPte; PFN_NUMBER PageFrameNumber; if (Phase == 0)