[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




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.