https://git.reactos.org/?p=reactos.git;a=commitdiff;h=32c7c1157d64edd0f2e512644e518abfcc372542

commit 32c7c1157d64edd0f2e512644e518abfcc372542
Author:     Victor Perevertkin <victor.perevert...@reactos.org>
AuthorDate: Tue Sep 8 14:51:20 2020 +0300
Commit:     Victor Perevertkin <victor.perevert...@reactos.org>
CommitDate: Tue Sep 8 14:51:20 2020 +0300

    [NTOS:IO] Fix a reference leak in IopSynchronousCall on failure case
    
    Co-authored-by: Vadim Galyant <v...@rambler.ru>
---
 ntoskrnl/io/pnpmgr/pnpmgr.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/ntoskrnl/io/pnpmgr/pnpmgr.c b/ntoskrnl/io/pnpmgr/pnpmgr.c
index 7ed3eee62a0..ac9d71a9b99 100644
--- a/ntoskrnl/io/pnpmgr/pnpmgr.c
+++ b/ntoskrnl/io/pnpmgr/pnpmgr.c
@@ -563,7 +563,11 @@ IopSynchronousCall(IN PDEVICE_OBJECT DeviceObject,
 
     /* Allocate an IRP */
     Irp = IoAllocateIrp(TopDeviceObject->StackSize, FALSE);
-    if (!Irp) return STATUS_INSUFFICIENT_RESOURCES;
+    if (!Irp)
+    {
+        ObDereferenceObject(TopDeviceObject);
+        return STATUS_INSUFFICIENT_RESOURCES;
+    }
 
     /* Initialize to failure */
     Irp->IoStatus.Status = IoStatusBlock.Status = STATUS_NOT_SUPPORTED;

Reply via email to