https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d52031a4f1381282891f9f97b0c5812356aa83dc
commit d52031a4f1381282891f9f97b0c5812356aa83dc Author: Thamatip Chitpong <[email protected]> AuthorDate: Tue Nov 19 11:17:41 2024 +0700 Commit: GitHub <[email protected]> CommitDate: Tue Nov 19 11:17:41 2024 +0700 [NTOS:MM] MmPurgeSegment: Fix missing MmDereferenceSegment cleanup (#7509) MiGrabDataSection adds a refcount. There is a missing MmDereferenceSegment cleanup in case of range check error. Fix that by moving MiGrabDataSection calling code to after range check. --- ntoskrnl/mm/section.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ntoskrnl/mm/section.c b/ntoskrnl/mm/section.c index f935e6f30c1..50609bac71c 100644 --- a/ntoskrnl/mm/section.c +++ b/ntoskrnl/mm/section.c @@ -4838,13 +4838,6 @@ MmPurgeSegment( LARGE_INTEGER PurgeStart, PurgeEnd; PMM_SECTION_SEGMENT Segment; - Segment = MiGrabDataSection(SectionObjectPointer); - if (!Segment) - { - /* Nothing to purge */ - return TRUE; - } - PurgeStart.QuadPart = Offset ? Offset->QuadPart : 0LL; if (Length && Offset) { @@ -4852,6 +4845,13 @@ MmPurgeSegment( return FALSE; } + Segment = MiGrabDataSection(SectionObjectPointer); + if (!Segment) + { + /* Nothing to purge */ + return TRUE; + } + MmLockSectionSegment(Segment); if (!Length || !Offset)
