https://git.reactos.org/?p=reactos.git;a=commitdiff;h=884db2ea06f1c961d2efcc13d477bc76ea0f7f50
commit 884db2ea06f1c961d2efcc13d477bc76ea0f7f50 Author: Hermès Bélusca-Maïto <[email protected]> AuthorDate: Mon Apr 22 21:09:10 2019 +0200 Commit: Hermès Bélusca-Maïto <[email protected]> CommitDate: Mon Apr 22 21:09:10 2019 +0200 [NTOS:CM] In CmpParseKey(), do not assert but instead correctly return failure if CmpHandleExitNode() doesn't return a valid node, or CmpCreateKeyControlBlock() fails. --- ntoskrnl/config/cmparse.c | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/ntoskrnl/config/cmparse.c b/ntoskrnl/config/cmparse.c index fe25e252bd..872a79619a 100644 --- a/ntoskrnl/config/cmparse.c +++ b/ntoskrnl/config/cmparse.c @@ -960,7 +960,7 @@ CmpHandleExitNode(IN OUT PHHIVE *Hive, { /* Release it */ ASSERT(*ReleaseHive != NULL); - HvReleaseCell((*ReleaseHive), *ReleaseCell); + HvReleaseCell(*ReleaseHive, *ReleaseCell); } /* Get the link references */ @@ -968,7 +968,7 @@ CmpHandleExitNode(IN OUT PHHIVE *Hive, *Cell = (*KeyNode)->ChildHiveReference.KeyCell; /* Get the new node */ - *KeyNode = (PCM_KEY_NODE)HvGetCell((*Hive), *Cell); + *KeyNode = (PCM_KEY_NODE)HvGetCell(*Hive, *Cell); if (*KeyNode) { /* Set the new release values */ @@ -1191,7 +1191,12 @@ CmpParseKey(IN PVOID ParseObject, &Node, &HiveToRelease, &CellToRelease); - if (!Node) ASSERT(FALSE); + if (!Node) + { + /* Fail */ + Status = STATUS_INSUFFICIENT_RESOURCES; + break; + } } /* Do the open */ @@ -1232,7 +1237,12 @@ CmpParseKey(IN PVOID ParseObject, &Node, &HiveToRelease, &CellToRelease); - if (!Node) ASSERT(FALSE); + if (!Node) + { + /* Fail */ + Status = STATUS_INSUFFICIENT_RESOURCES; + break; + } } /* Create a KCB for this key */ @@ -1242,7 +1252,12 @@ CmpParseKey(IN PVOID ParseObject, ParentKcb, 0, &NextName); - if (!Kcb) ASSERT(FALSE); + if (!Kcb) + { + /* Fail */ + Status = STATUS_INSUFFICIENT_RESOURCES; + break; + } /* Dereference the parent and set the new one */ CmpDereferenceKeyControlBlock(ParentKcb); @@ -1353,7 +1368,12 @@ CmpParseKey(IN PVOID ParseObject, &Node, &HiveToRelease, &CellToRelease); - if (!Node) ASSERT(FALSE); + if (!Node) + { + /* Fail */ + Status = STATUS_INSUFFICIENT_RESOURCES; + break; + } } /* Do the open */ @@ -1386,7 +1406,8 @@ CmpParseKey(IN PVOID ParseObject, /* Dereference the parent if it exists */ Quickie: - if (ParentKcb) CmpDereferenceKeyControlBlock(ParentKcb); + if (ParentKcb) + CmpDereferenceKeyControlBlock(ParentKcb); /* Unlock the registry */ CmpUnlockRegistry();
