|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [XENCONS PATCH 09/11] Check for IoAttachDeviceToDeviceStack failure in FdoCreate
Signed-off-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
---
src/xencons/fdo.c | 72 +++++++++++++++++++++++++----------------------
1 file changed, 38 insertions(+), 34 deletions(-)
diff --git a/src/xencons/fdo.c b/src/xencons/fdo.c
index 02a9f3e..e2ebcac 100644
--- a/src/xencons/fdo.c
+++ b/src/xencons/fdo.c
@@ -2993,25 +2993,27 @@ FdoCreate(
Fdo->PhysicalDeviceObject = PhysicalDeviceObject;
Fdo->LowerDeviceObject = IoAttachDeviceToDeviceStack(FunctionDeviceObject,
PhysicalDeviceObject);
+ if (Fdo->LowerDeviceObject == NULL)
+ goto fail4;
status = ThreadCreate(FdoSystemPower, Fdo, &Fdo->SystemPowerThread);
if (!NT_SUCCESS(status))
- goto fail4;
+ goto fail5;
status = ThreadCreate(FdoDevicePower, Fdo, &Fdo->DevicePowerThread);
if (!NT_SUCCESS(status))
- goto fail5;
+ goto fail6;
status = __FdoAcquireLowerBusInterface(Fdo);
if (!NT_SUCCESS(status))
- goto fail6;
+ goto fail7;
if (FdoGetBusData(Fdo,
PCI_WHICHSPACE_CONFIG,
&DeviceID,
FIELD_OFFSET(PCI_COMMON_HEADER, DeviceID),
FIELD_SIZE(PCI_COMMON_HEADER, DeviceID)) == 0)
- goto fail7;
+ goto fail8;
__FdoSetVendorName(Fdo, DeviceID);
@@ -3024,7 +3026,7 @@ FdoCreate(
sizeof (Fdo->DebugInterface),
FALSE);
if (!NT_SUCCESS(status))
- goto fail8;
+ goto fail9;
status = FDO_QUERY_INTERFACE(Fdo,
XENBUS,
@@ -3033,7 +3035,7 @@ FdoCreate(
sizeof (Fdo->SuspendInterface),
FALSE);
if (!NT_SUCCESS(status))
- goto fail9;
+ goto fail10;
status = FDO_QUERY_INTERFACE(Fdo,
XENBUS,
@@ -3042,7 +3044,7 @@ FdoCreate(
sizeof (Fdo->StoreInterface),
FALSE);
if (!NT_SUCCESS(status))
- goto fail10;
+ goto fail11;
status = FDO_QUERY_INTERFACE(Fdo,
XENBUS,
@@ -3051,7 +3053,7 @@ FdoCreate(
sizeof (Fdo->ConsoleInterface),
FALSE);
if (!NT_SUCCESS(status))
- goto fail11;
+ goto fail12;
status = FDO_QUERY_INTERFACE(Fdo,
XENBUS,
@@ -3060,7 +3062,7 @@ FdoCreate(
sizeof(Fdo->EvtchnInterface),
FALSE);
if (!NT_SUCCESS(status))
- goto fail12;
+ goto fail13;
status = FDO_QUERY_INTERFACE(Fdo,
XENBUS,
@@ -3069,7 +3071,7 @@ FdoCreate(
sizeof(Fdo->GnttabInterface),
FALSE);
if (!NT_SUCCESS(status))
- goto fail13;
+ goto fail14;
Dx->Fdo = Fdo;
@@ -3083,13 +3085,13 @@ FdoCreate(
status = PdoCreate(Fdo, NULL);
if (!NT_SUCCESS(status))
- goto fail14;
+ goto fail15;
FunctionDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
return STATUS_SUCCESS;
-fail14:
- Error("fail14\n");
+fail15:
+ Error("fail15\n");
Dx->Fdo = Fdo;
@@ -3100,66 +3102,68 @@ fail14:
RtlZeroMemory(&Fdo->GnttabInterface,
sizeof(XENBUS_GNTTAB_INTERFACE));
-fail13:
- Error("fail13\n");
+fail14:
+ Error("fail14\n");
RtlZeroMemory(&Fdo->EvtchnInterface,
sizeof(XENBUS_EVTCHN_INTERFACE));
-fail12:
- Error("fail12\n");
+fail13:
+ Error("fail13\n");
RtlZeroMemory(&Fdo->ConsoleInterface,
sizeof(XENBUS_CONSOLE_INTERFACE));
-fail11:
- Error("fail11\n");
+fail12:
+ Error("fail12\n");
RtlZeroMemory(&Fdo->StoreInterface,
sizeof (XENBUS_STORE_INTERFACE));
-fail10:
- Error("fail10\n");
+fail11:
+ Error("fail11\n");
RtlZeroMemory(&Fdo->SuspendInterface,
sizeof (XENBUS_SUSPEND_INTERFACE));
-fail9:
- Error("fail9\n");
+fail10:
+ Error("fail10\n");
RtlZeroMemory(&Fdo->DebugInterface,
sizeof (XENBUS_DEBUG_INTERFACE));
-fail8:
- Error("fail8\n");
+fail9:
+ Error("fail9\n");
RtlZeroMemory(Fdo->VendorName, MAXNAMELEN);
-fail7:
- Error("fail7\n");
+fail8:
+ Error("fail8\n");
__FdoReleaseLowerBusInterface(Fdo);
-fail6:
- Error("fail6\n");
+fail7:
+ Error("fail7\n");
ThreadAlert(Fdo->DevicePowerThread);
ThreadJoin(Fdo->DevicePowerThread);
Fdo->DevicePowerThread = NULL;
-fail5:
- Error("fail5\n");
+fail6:
+ Error("fail6\n");
ThreadAlert(Fdo->SystemPowerThread);
ThreadJoin(Fdo->SystemPowerThread);
Fdo->SystemPowerThread = NULL;
-fail4:
- Error("fail4\n");
+fail5:
+ Error("fail5\n");
-#pragma prefast(suppress:28183) // Fdo->LowerDeviceObject could be NULL
+ if (Fdo->LowerDeviceObject)
IoDetachDevice(Fdo->LowerDeviceObject);
+fail4:
+
Fdo->PhysicalDeviceObject = NULL;
Fdo->LowerDeviceObject = NULL;
Fdo->Dx = NULL;
--
2.51.0.windows.1
--
Ngoc Tu Dinh | Vates XCP-ng Developer
XCP-ng & Xen Orchestra - Vates solutions
web: https://vates.tech
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |