|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [XENBUS PATCH 11/13] Check for IoAttachDeviceToDeviceStack failure in FdoCreate
IoAttachDeviceToDeviceStack may fail and is marked _Must_inspect_result_.
Signed-off-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
---
src/xenbus/fdo.c | 103 +++++++++++++++++++++++++----------------------
1 file changed, 54 insertions(+), 49 deletions(-)
diff --git a/src/xenbus/fdo.c b/src/xenbus/fdo.c
index c876eb6..62e0bfd 100644
--- a/src/xenbus/fdo.c
+++ b/src/xenbus/fdo.c
@@ -5789,37 +5789,39 @@ FdoCreate(
Fdo->PhysicalDeviceObject = PhysicalDeviceObject;
Fdo->LowerDeviceObject = IoAttachDeviceToDeviceStack(FunctionDeviceObject,
PhysicalDeviceObject);
+ if (Fdo->LowerDeviceObject == NULL)
+ goto fail3;
Fdo->SystemPowerWorkItem = IoAllocateWorkItem(FunctionDeviceObject);
if (Fdo->SystemPowerWorkItem == NULL)
- goto fail3;
+ goto fail4;
Fdo->DevicePowerWorkItem = IoAllocateWorkItem(FunctionDeviceObject);
if (Fdo->DevicePowerWorkItem == NULL)
- goto fail4;
+ goto fail5;
status = FdoAcquireLowerBusInterface(Fdo);
if (!NT_SUCCESS(status))
- goto fail5;
+ goto fail6;
if (FdoGetBusData(Fdo,
PCI_WHICHSPACE_CONFIG,
&Header,
0,
sizeof (PCI_COMMON_HEADER)) == 0)
- goto fail6;
+ goto fail7;
status = __FdoSetVendorName(Fdo,
Header.VendorID,
Header.DeviceID);
if (!NT_SUCCESS(status))
- goto fail7;
+ goto fail8;
__FdoSetName(Fdo);
status = FdoSetActive(Fdo);
if (!NT_SUCCESS(status))
- goto fail8;
+ goto fail9;
if (!__FdoIsActive(Fdo))
goto done;
@@ -5836,47 +5838,47 @@ FdoCreate(
status = DebugInitialize(Fdo, &Fdo->DebugContext);
if (!NT_SUCCESS(status))
- goto fail9;
+ goto fail10;
status = SuspendInitialize(Fdo, &Fdo->SuspendContext);
if (!NT_SUCCESS(status))
- goto fail10;
+ goto fail11;
status = SharedInfoInitialize(Fdo, &Fdo->SharedInfoContext);
if (!NT_SUCCESS(status))
- goto fail11;
+ goto fail12;
status = EvtchnInitialize(Fdo, &Fdo->EvtchnContext);
if (!NT_SUCCESS(status))
- goto fail12;
+ goto fail13;
status = RangeSetInitialize(Fdo, &Fdo->RangeSetContext);
if (!NT_SUCCESS(status))
- goto fail13;
+ goto fail14;
status = CacheInitialize(Fdo, &Fdo->CacheContext);
if (!NT_SUCCESS(status))
- goto fail14;
+ goto fail15;
status = GnttabInitialize(Fdo, &Fdo->GnttabContext);
if (!NT_SUCCESS(status))
- goto fail15;
+ goto fail16;
status = StoreInitialize(Fdo, &Fdo->StoreContext);
if (!NT_SUCCESS(status))
- goto fail16;
+ goto fail17;
status = ConsoleInitialize(Fdo, &Fdo->ConsoleContext);
if (!NT_SUCCESS(status))
- goto fail17;
+ goto fail18;
status = UnplugInitialize(Fdo, &Fdo->UnplugContext);
if (!NT_SUCCESS(status))
- goto fail18;
+ goto fail19;
status = FdoBalloonInitialize(Fdo);
if (!NT_SUCCESS(status))
- goto fail19;
+ goto fail20;
status = DebugGetInterface(__FdoGetDebugContext(Fdo),
XENBUS_DEBUG_INTERFACE_VERSION_MAX,
@@ -5945,68 +5947,68 @@ done:
return STATUS_SUCCESS;
-fail19:
- Error("fail19\n");
+fail20:
+ Error("fail20\n");
UnplugTeardown(Fdo->UnplugContext);
Fdo->UnplugContext = NULL;
-fail18:
- Error("fail18\n");
+fail19:
+ Error("fail19\n");
ConsoleTeardown(Fdo->ConsoleContext);
Fdo->ConsoleContext = NULL;
-fail17:
- Error("fail17\n");
+fail18:
+ Error("fail18\n");
StoreTeardown(Fdo->StoreContext);
Fdo->StoreContext = NULL;
-fail16:
- Error("fail16\n");
+fail17:
+ Error("fail17\n");
GnttabTeardown(Fdo->GnttabContext);
Fdo->GnttabContext = NULL;
-fail15:
- Error("fail15\n");
+fail16:
+ Error("fail16\n");
CacheTeardown(Fdo->CacheContext);
Fdo->CacheContext = NULL;
-fail14:
- Error("fail14\n");
+fail15:
+ Error("fail15\n");
RangeSetTeardown(Fdo->RangeSetContext);
Fdo->RangeSetContext = NULL;
-fail13:
- Error("fail13\n");
+fail14:
+ Error("fail14\n");
EvtchnTeardown(Fdo->EvtchnContext);
Fdo->EvtchnContext = NULL;
-fail12:
- Error("fail12\n");
+fail13:
+ Error("fail13\n");
SharedInfoTeardown(Fdo->SharedInfoContext);
Fdo->SharedInfoContext = NULL;
-fail11:
- Error("fail11\n");
+fail12:
+ Error("fail12\n");
SuspendTeardown(Fdo->SuspendContext);
Fdo->SuspendContext = NULL;
-fail10:
- Error("fail10\n");
+fail11:
+ Error("fail11\n");
DebugTeardown(Fdo->DebugContext);
Fdo->DebugContext = NULL;
-fail9:
- Error("fail9\n");
+fail10:
+ Error("fail10\n");
Fdo->UseMemoryHole = 0;
@@ -6016,37 +6018,40 @@ fail9:
//
Fdo->Active = FALSE;
-fail8:
- Error("fail8\n");
+fail9:
+ Error("fail9\n");
RtlZeroMemory(Fdo->VendorName, MAXNAMELEN);
+fail8:
+ Error("fail8\n");
+
fail7:
Error("fail7\n");
+ FdoReleaseLowerBusInterface(Fdo);
+
fail6:
Error("fail6\n");
- FdoReleaseLowerBusInterface(Fdo);
+ IoFreeWorkItem(Fdo->DevicePowerWorkItem);
+ Fdo->DevicePowerWorkItem = NULL;
fail5:
Error("fail5\n");
- IoFreeWorkItem(Fdo->DevicePowerWorkItem);
- Fdo->DevicePowerWorkItem = NULL;
+ IoFreeWorkItem(Fdo->SystemPowerWorkItem);
+ Fdo->SystemPowerWorkItem = NULL;
fail4:
Error("fail4\n");
- IoFreeWorkItem(Fdo->SystemPowerWorkItem);
- Fdo->SystemPowerWorkItem = NULL;
+ if (Fdo->LowerDeviceObject)
+ IoDetachDevice(Fdo->LowerDeviceObject);
fail3:
Error("fail3\n");
-#pragma prefast(suppress:28183) // Fdo->LowerDeviceObject could be NULL
- IoDetachDevice(Fdo->LowerDeviceObject);
-
Fdo->PhysicalDeviceObject = NULL;
Fdo->LowerDeviceObject = NULL;
Fdo->Dx = NULL;
--
2.50.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 |