diff --git a/ntoskrnl/mm/ARM3/procsup.c b/ntoskrnl/mm/ARM3/procsup.c index 009168eba95..51502b9a5d1 100644 --- a/ntoskrnl/mm/ARM3/procsup.c +++ b/ntoskrnl/mm/ARM3/procsup.c @@ -175,6 +175,7 @@ MmDeleteKernelStack(IN PVOID StackBase, PMMPFN Pfn1, Pfn2; ULONG i; KIRQL OldIrql; + PSLIST_ENTRY SListEntry; // // This should be the guard page, so decrement by one @@ -189,9 +190,8 @@ MmDeleteKernelStack(IN PVOID StackBase, { if (ExQueryDepthSList(&MmDeadStackSListHead) < MmMaximumDeadKernelStacks) { - Pfn1 = MiGetPfnEntry(PointerPte->u.Hard.PageFrameNumber); - InterlockedPushEntrySList(&MmDeadStackSListHead, - (PSLIST_ENTRY)&Pfn1->u1.NextStackPfn); + SListEntry = ((PSLIST_ENTRY)StackBase) - 1; + InterlockedPushEntrySList(&MmDeadStackSListHead, SListEntry); return; } } @@ -265,7 +265,7 @@ MmCreateKernelStack(IN BOOLEAN GuiStack, KIRQL OldIrql; PFN_NUMBER PageFrameIndex; ULONG i; - PMMPFN Pfn1; + PSLIST_ENTRY SListEntry; // // Calculate pages needed @@ -286,11 +286,10 @@ MmCreateKernelStack(IN BOOLEAN GuiStack, // if (ExQueryDepthSList(&MmDeadStackSListHead)) { - Pfn1 = (PMMPFN)InterlockedPopEntrySList(&MmDeadStackSListHead); - if (Pfn1) + SListEntry = InterlockedPopEntrySList(&MmDeadStackSListHead); + if (SListEntry != NULL) { - PointerPte = Pfn1->PteAddress; - BaseAddress = MiPteToAddress(++PointerPte); + BaseAddress = (SListEntry + 1); return BaseAddress; } }