From 32c7c1157d64edd0f2e512644e518abfcc372542 Mon Sep 17 00:00:00 2001 From: Victor Perevertkin Date: Tue, 8 Sep 2020 14:51:20 +0300 Subject: [PATCH] [NTOS:IO] Fix a reference leak in IopSynchronousCall on failure case Co-authored-by: Vadim Galyant --- 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;