From fc6bf61e4c90caa3db244d137efdb873d4876e48 Mon Sep 17 00:00:00 2001 From: Gleb Surikov Date: Sat, 30 Mar 2024 21:10:17 +0200 Subject: [PATCH] [NTOS:CM] Avoid unnecessary ObDereferenceObject when handling an ObInsertObject failure (#6673) In case of failure, ObInsertObject itself dereferences the object, so calling ObDereferenceObject one more time in the failure handler is redundant. - Remove ObDereferenceObject call from CmpCreateRegistryRoot in case ObInsertObject fails. - Add missing RootKey dereference if CmpCreateRegistryRoot failed to get the key cell (KeyCell). CORE-17904 --- ntoskrnl/config/cmsysini.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ntoskrnl/config/cmsysini.c b/ntoskrnl/config/cmsysini.c index d401c726e1b..a8ddc104073 100644 --- a/ntoskrnl/config/cmsysini.c +++ b/ntoskrnl/config/cmsysini.c @@ -1109,7 +1109,11 @@ CmpCreateRegistryRoot(VOID) /* Sanity check, and get the key cell */ ASSERT((&CmiVolatileHive->Hive)->ReleaseCellRoutine == NULL); KeyCell = (PCM_KEY_NODE)HvGetCell(&CmiVolatileHive->Hive, RootIndex); - if (!KeyCell) return FALSE; + if (!KeyCell) + { + ObDereferenceObject(RootKey); + return FALSE; + } /* Create the KCB */ RtlInitUnicodeString(&KeyName, L"\\REGISTRY"); @@ -1144,7 +1148,6 @@ CmpCreateRegistryRoot(VOID) &CmpRegistryRootHandle); if (!NT_SUCCESS(Status)) { - ObDereferenceObject(RootKey); return FALSE; }