|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH] Fix pool leaks exposed by DriverVerifier
From: Owen Smith <owen.smith@xxxxxxxxxx>
* RegistryCloseKey was not called in DriverRequestReboot
* RegistryTeardown was not being called in DriverUnload
* __RegistryFree was not being called in RegistryCreateKey
* Reordered DriverEntry slightly for improved code consistancy
Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
src/xenvbd/driver.c | 37 +++++++++++++++++++++++++------------
src/xenvbd/registry.c | 2 ++
2 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/src/xenvbd/driver.c b/src/xenvbd/driver.c
index 3fb2fcc..776d5ae 100644
--- a/src/xenvbd/driver.c
+++ b/src/xenvbd/driver.c
@@ -198,6 +198,8 @@ DriverRequestReboot(
RegistryCloseKey(SubKey);
+ RegistryCloseKey(RequestKey);
+
RegistryFreeSzValue(Ansi);
return;
@@ -470,6 +472,7 @@ DriverUnload(
Driver.StorPortDriverUnload(_DriverObject);
BufferTerminate();
RegistryCloseKey(Driver.ParametersKey);
+ RegistryTeardown();
Trace("<=== (Irql=%d)\n", KeGetCurrentIrql());
}
@@ -517,6 +520,7 @@ DriverEntry(
Driver.ParametersKey = ParametersKey;
RegistryCloseKey(ServiceKey);
+ ServiceKey = NULL;
KeInitializeSpinLock(&Driver.Lock);
Driver.Fdo = NULL;
@@ -555,23 +559,32 @@ DriverEntry(
RegistryPath,
&InitData,
NULL);
- if (NT_SUCCESS(status)) {
- Driver.StorPortDispatchPnp =
_DriverObject->MajorFunction[IRP_MJ_PNP];
- Driver.StorPortDispatchPower =
_DriverObject->MajorFunction[IRP_MJ_POWER];
- Driver.StorPortDriverUnload = _DriverObject->DriverUnload;
-
- _DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp;
- _DriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower;
- _DriverObject->DriverUnload = DriverUnload;
- }
+ if (!NT_SUCCESS(status))
+ goto fail4;
- Trace("<=== (%08x) (Irql=%d)\n", status, KeGetCurrentIrql());
- return status;
+ Driver.StorPortDispatchPnp = _DriverObject->MajorFunction[IRP_MJ_PNP];
+ Driver.StorPortDispatchPower =
_DriverObject->MajorFunction[IRP_MJ_POWER];
+ Driver.StorPortDriverUnload = _DriverObject->DriverUnload;
+
+ _DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp;
+ _DriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower;
+ _DriverObject->DriverUnload = DriverUnload;
+
+ Trace("<=== (%08x) (Irql=%d)\n", STATUS_SUCCESS, KeGetCurrentIrql());
+ return STATUS_SUCCESS;
+
+fail4:
+ Error("fail4\n");
+
+ BufferTerminate();
+ RegistryCloseKey(Driver.ParametersKey);
+ Driver.ParametersKey = NULL;
fail3:
Error("fail3\n");
- RegistryCloseKey(ServiceKey);
+ if (ServiceKey)
+ RegistryCloseKey(ServiceKey);
fail2:
Error("fail2\n");
diff --git a/src/xenvbd/registry.c b/src/xenvbd/registry.c
index b70bc89..9ceffa5 100644
--- a/src/xenvbd/registry.c
+++ b/src/xenvbd/registry.c
@@ -234,6 +234,8 @@ RegistryCreateKey(
*Key = Child;
+ __RegistryFree(Buffer);
+
return STATUS_SUCCESS;
fail4:
--
2.8.3
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |