[NTOSKRNL] Properly delete VACB in CcRosCreateVacb() when mapping fails.
authorPierre Schweitzer <pierre@reactos.org>
Sun, 25 Mar 2018 16:26:32 +0000 (18:26 +0200)
committerPierre Schweitzer <pierre@reactos.org>
Sun, 25 Mar 2018 16:27:19 +0000 (18:27 +0200)
Spotted by Thomas.

CORE-14478
CORE-14502

ntoskrnl/cc/view.c

index 9cc45bd..ba87c5e 100644 (file)
@@ -831,18 +831,20 @@ CcRosCreateVacb (
     }
 #endif
 
+    /* Reference it to allow release */
+    CcRosVacbIncRefCount(current);
+
     Status = CcRosMapVacbInKernelSpace(current);
     if (!NT_SUCCESS(Status))
     {
         RemoveEntryList(&current->CacheMapVacbListEntry);
         RemoveEntryList(&current->VacbLruListEntry);
-        CcRosReleaseVacbLock(current);
+        CcRosReleaseVacb(SharedCacheMap, current, FALSE,
+                         FALSE, FALSE);
+        CcRosVacbDecRefCount(current);
         ExFreeToNPagedLookasideList(&VacbLookasideList, current);
     }
 
-    /* Reference it to allow release */
-    CcRosVacbIncRefCount(current);
-
     return Status;
 }