https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9d9cce2838e2f2773818108b3cfe6be6c3e482cd
commit 9d9cce2838e2f2773818108b3cfe6be6c3e482cd Author: Pierre Schweitzer <[email protected]> AuthorDate: Sun Dec 31 10:21:42 2017 +0100 [NTFS] Don't leak attributes contextes in the btree management functions CID 1427030, 1427062 --- drivers/filesystems/ntfs/btree.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/drivers/filesystems/ntfs/btree.c b/drivers/filesystems/ntfs/btree.c index 9fb1b29c0f..35a6eb6cd0 100644 --- a/drivers/filesystems/ntfs/btree.c +++ b/drivers/filesystems/ntfs/btree.c @@ -732,7 +732,8 @@ CreateBTreeFromIndex(PDEVICE_EXTENSION Vcb, { DPRINT1("Filesystem corruption detected!\n"); DestroyBTree(Tree); - return STATUS_FILE_CORRUPT_ERROR; + Status = STATUS_FILE_CORRUPT_ERROR; + goto Cleanup; } // Start at the first node entry @@ -749,7 +750,8 @@ CreateBTreeFromIndex(PDEVICE_EXTENSION Vcb, { DPRINT1("ERROR: Couldn't allocate memory for next key!\n"); DestroyBTree(Tree); - return STATUS_INSUFFICIENT_RESOURCES; + Status = STATUS_INSUFFICIENT_RESOURCES; + goto Cleanup; } RootNode->KeyCount++; @@ -763,7 +765,8 @@ CreateBTreeFromIndex(PDEVICE_EXTENSION Vcb, { DPRINT1("ERROR: Couldn't allocate memory for next key!\n"); DestroyBTree(Tree); - return STATUS_INSUFFICIENT_RESOURCES; + Status = STATUS_INSUFFICIENT_RESOURCES; + goto Cleanup; } RtlZeroMemory(NextKey, sizeof(B_TREE_KEY)); @@ -786,7 +789,8 @@ CreateBTreeFromIndex(PDEVICE_EXTENSION Vcb, { DPRINT1("ERROR: Couldn't create child node!\n"); DestroyBTree(Tree); - return STATUS_NOT_IMPLEMENTED; + Status = STATUS_NOT_IMPLEMENTED; + goto Cleanup; } } @@ -813,7 +817,8 @@ CreateBTreeFromIndex(PDEVICE_EXTENSION Vcb, { DPRINT1("ERROR: Couldn't create child node!\n"); DestroyBTree(Tree); - return STATUS_NOT_IMPLEMENTED; + Status = STATUS_NOT_IMPLEMENTED; + goto Cleanup; } } @@ -822,11 +827,13 @@ CreateBTreeFromIndex(PDEVICE_EXTENSION Vcb, } *NewTree = Tree; + Status = STATUS_SUCCESS; +Cleanup: if (IndexAllocationContext) ReleaseAttributeContext(IndexAllocationContext); - return STATUS_SUCCESS; + return Status; } /** @@ -1242,6 +1249,7 @@ UpdateIndexAllocation(PDEVICE_EXTENSION DeviceExt, if (!NT_SUCCESS(Status)) { DPRINT1("ERROR: Failed to add index bitmap!\n"); + ReleaseAttributeContext(IndexAllocationContext); return Status; } @@ -2019,4 +2027,4 @@ SplitBTreeNode(PB_TREE Tree, #endif return STATUS_SUCCESS; -} \ No newline at end of file +}
