[NTOS:CM]
authorAmine Khaldi <amine.khaldi@reactos.org>
Thu, 26 Jun 2014 19:35:48 +0000 (19:35 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Thu, 26 Jun 2014 19:35:48 +0000 (19:35 +0000)
* Plug some leaks. Inspired by CID 1206912 and fixed by Timo.
CORE-7975

svn path=/trunk/; revision=63647

reactos/ntoskrnl/config/cmsysini.c

index 4201fd2..f41d27b 100644 (file)
@@ -1052,7 +1052,11 @@ CmpCreateRegistryRoot(VOID)
                                    NULL,
                                    0,
                                    &KeyName);
                                    NULL,
                                    0,
                                    &KeyName);
-    if (!Kcb) return FALSE;
+    if (!Kcb)
+    {
+        ObDereferenceObject(RootKey);
+        return FALSE;
+    }
 
     /* Initialize the object */
     RootKey->KeyControlBlock = Kcb;
 
     /* Initialize the object */
     RootKey->KeyControlBlock = Kcb;
@@ -1070,7 +1074,11 @@ CmpCreateRegistryRoot(VOID)
                             0,
                             NULL,
                             &CmpRegistryRootHandle);
                             0,
                             NULL,
                             &CmpRegistryRootHandle);
-    if (!NT_SUCCESS(Status)) return FALSE;
+    if (!NT_SUCCESS(Status))
+    {
+        ObDereferenceObject(RootKey);
+        return FALSE;
+    }
 
     /* Reference the key again so that we never lose it */
     Status = ObReferenceObjectByHandle(CmpRegistryRootHandle,
 
     /* Reference the key again so that we never lose it */
     Status = ObReferenceObjectByHandle(CmpRegistryRootHandle,
@@ -1079,7 +1087,11 @@ CmpCreateRegistryRoot(VOID)
                                        KernelMode,
                                        (PVOID*)&RootKey,
                                        NULL);
                                        KernelMode,
                                        (PVOID*)&RootKey,
                                        NULL);
-    if (!NT_SUCCESS(Status)) return FALSE;
+    if (!NT_SUCCESS(Status))
+    {
+        ObDereferenceObject(RootKey);
+        return FALSE;
+    }
 
     /* Completely sucessful */
     return TRUE;
 
     /* Completely sucessful */
     return TRUE;