]> xenbits.xensource.com Git - qemu-xen.git/commitdiff
pci_bridge_dev: fix error path in pci_bridge_dev_initfn()
authorJason Baron <jbaron@redhat.com>
Thu, 3 May 2012 02:42:15 +0000 (22:42 -0400)
committerMichael S. Tsirkin <mst@redhat.com>
Mon, 11 Jun 2012 19:55:13 +0000 (22:55 +0300)
Currently, we do not properly cleanup, if pci_bridge_dev_initfn
fails to initialize properly. Make sure to call pci_bridge_exitfn()
in the error path.

Signed-off-by: Jason Baron <jbaron@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
hw/pci_bridge_dev.c

index b6d5fb7388ff548ba771ed20ba4a69f85e81ca16..1cc1d2049c557b2f07eb77f9b39bd9364b1ba6d8 100644 (file)
@@ -52,7 +52,7 @@ static int pci_bridge_dev_initfn(PCIDevice *dev)
 {
     PCIBridge *br = DO_UPCAST(PCIBridge, dev, dev);
     PCIBridgeDev *bridge_dev = DO_UPCAST(PCIBridgeDev, bridge, br);
-    int err;
+    int err, ret;
     pci_bridge_map_irq(br, NULL, pci_bridge_dev_map_irq_fn);
     err = pci_bridge_initfn(dev);
     if (err) {
@@ -86,6 +86,8 @@ slotid_error:
     shpc_cleanup(dev, &bridge_dev->bar);
 shpc_error:
     memory_region_destroy(&bridge_dev->bar);
+    ret = pci_bridge_exitfn(dev);
+    assert(!ret);
 bridge_error:
     return err;
 }