https://git.reactos.org/?p=reactos.git;a=commitdiff;h=bf95b7e8e5e7544a5048ed700fced44ba238d553

commit bf95b7e8e5e7544a5048ed700fced44ba238d553
Author:     Timo Kreuzer <[email protected]>
AuthorDate: Tue Nov 7 00:58:15 2023 +0200
Commit:     Timo Kreuzer <[email protected]>
CommitDate: Fri Nov 17 20:07:55 2023 +0200

    [NTOS:CC] Do not access VACB after decrementing it's reference count
    
    It might already be deleted by a different thread.
---
 ntoskrnl/cc/view.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/ntoskrnl/cc/view.c b/ntoskrnl/cc/view.c
index efa4c8523d4..2a0590dba49 100644
--- a/ntoskrnl/cc/view.c
+++ b/ntoskrnl/cc/view.c
@@ -75,13 +75,16 @@ ULONG CcRosVacbIncRefCount_(PROS_VACB vacb, PCSTR file, INT 
line)
 ULONG CcRosVacbDecRefCount_(PROS_VACB vacb, PCSTR file, INT line)
 {
     ULONG Refs;
+    BOOLEAN VacbDirty = vacb->Dirty;
+    BOOLEAN VacbTrace = vacb->SharedCacheMap->Trace;
+    BOOLEAN VacbPageOut = vacb->PageOut;
 
     Refs = InterlockedDecrement((PLONG)&vacb->ReferenceCount);
-    ASSERT(!(Refs == 0 && vacb->Dirty));
-    if (vacb->SharedCacheMap->Trace)
+    ASSERT(!(Refs == 0 && VacbDirty));
+    if (VacbTrace)
     {
         DbgPrint("(%s:%i) VACB %p --RefCount=%lu, Dirty %u, PageOut %lu\n",
-                 file, line, vacb, Refs, vacb->Dirty, vacb->PageOut);
+                 file, line, vacb, Refs, VacbDirty, VacbPageOut);
     }
 
     if (Refs == 0)

Reply via email to