Skip to content

Commit d5b957c

Browse files
committed
[NTOSKRNL/MM]
- assert PDE ref count consistency everywhere - fix the fix(tm) : after reference decrement, the maximum must not be reached svn path=/trunk/; revision=55925
1 parent 4aeb080 commit d5b957c

File tree

4 files changed

+11
-7
lines changed

4 files changed

+11
-7
lines changed

reactos/ntoskrnl/mm/ARM3/virtual.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ MiDeleteVirtualAddresses(IN ULONG_PTR Va,
412412
{
413413
DPRINT("Decrement used PTEs by address: %lx\n", Va);
414414
(*UsedPageTableEntries)--;
415-
ASSERT((*UsedPageTableEntries) <= PTE_COUNT);
415+
ASSERT((*UsedPageTableEntries) < PTE_COUNT);
416416
DPRINT("Refs: %lx\n", (*UsedPageTableEntries));
417417

418418
/* Check if the PTE is actually mapped in */

reactos/ntoskrnl/mm/anonmem.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ MmPageOutVirtualMemory(PMMSUPPORT AddressSpace,
117117
else if(Address < MmSystemRangeStart)
118118
{
119119
AddressSpace->VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--;
120+
ASSERT(AddressSpace->VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT);
120121
}
121122
#endif
122123
MmUnlockAddressSpace(AddressSpace);
@@ -416,6 +417,7 @@ MmModifyAttributes(PMMSUPPORT AddressSpace,
416417
if(Address < MmSystemRangeStart)
417418
{
418419
AddressSpace->VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--;
420+
ASSERT(AddressSpace->VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT);
419421
}
420422
#endif
421423
}
@@ -440,6 +442,7 @@ MmModifyAttributes(PMMSUPPORT AddressSpace,
440442
if(Address < MmSystemRangeStart)
441443
{
442444
AddressSpace->VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--;
445+
ASSERT(AddressSpace->VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT);
443446
}
444447
#endif
445448
}

reactos/ntoskrnl/mm/marea.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -758,7 +758,7 @@ MmFreeMemoryArea(
758758
{
759759
ASSERT(AddressSpace != MmGetKernelAddressSpace());
760760
MmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--;
761-
ASSERT(MmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] <= PTE_COUNT);
761+
ASSERT(MmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT);
762762
if(MmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] == 0)
763763
{
764764
/* No PTE relies on this PDE. Release it */

reactos/ntoskrnl/mm/section.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1602,6 +1602,7 @@ MmNotPresentFaultSectionView(PMMSUPPORT AddressSpace,
16021602
if(Address < MmSystemRangeStart)
16031603
{
16041604
MmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--;
1605+
ASSERT(MmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT);
16051606
}
16061607
#endif
16071608
MmLockAddressSpace(AddressSpace);
@@ -1978,7 +1979,7 @@ MmPageOutDeleteMapping(PVOID Context, PEPROCESS Process, PVOID Address)
19781979
if((Address < MmSystemRangeStart) && (Process != PageOutContext->CallingProcess))
19791980
{
19801981
Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--;
1981-
ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] <= PTE_COUNT);
1982+
ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT);
19821983
}
19831984
#endif
19841985

@@ -2158,7 +2159,7 @@ MmPageOutSectionView(PMMSUPPORT AddressSpace,
21582159
if(Address < MmSystemRangeStart)
21592160
{
21602161
Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--;
2161-
ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] <= PTE_COUNT);
2162+
ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT);
21622163
}
21632164
#endif
21642165
MmSetSavedSwapEntryPage(Page, 0);
@@ -2186,7 +2187,7 @@ MmPageOutSectionView(PMMSUPPORT AddressSpace,
21862187
if(Address < MmSystemRangeStart)
21872188
{
21882189
Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--;
2189-
ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] <= PTE_COUNT);
2190+
ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT);
21902191
}
21912192
#endif
21922193
MmSetSavedSwapEntryPage(Page, 0);
@@ -2247,7 +2248,7 @@ MmPageOutSectionView(PMMSUPPORT AddressSpace,
22472248
if(Address < MmSystemRangeStart)
22482249
{
22492250
Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--;
2250-
ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] <= PTE_COUNT);
2251+
ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT);
22512252
}
22522253
#endif
22532254
MmReleasePageMemoryConsumer(MC_USER, Page);
@@ -2413,7 +2414,7 @@ MmPageOutSectionView(PMMSUPPORT AddressSpace,
24132414
if(Address < MmSystemRangeStart)
24142415
{
24152416
Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--;
2416-
ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] <= PTE_COUNT);
2417+
ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT);
24172418
}
24182419
#endif
24192420
Entry = MAKE_SWAP_SSE(SwapEntry);

0 commit comments

Comments
 (0)