From: Ian Jackson Date: Tue, 24 Feb 2009 12:32:01 +0000 (+0000) Subject: hw/pass-through.c: fix a leak on error in pt_init() X-Git-Tag: t.master-before-merge~4 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=c930f24de999991039547e12749714b332b10411;p=qemu-xen-3.4-testing.git hw/pass-through.c: fix a leak on error in pt_init() vslots needs to be freed on error Signed-off-by: Simon Horman --- diff --git a/hw/pass-through.c b/hw/pass-through.c index f29e783a..96e7160a 100644 --- a/hw/pass-through.c +++ b/hw/pass-through.c @@ -3770,7 +3770,7 @@ int power_off_php_slot(int php_slot) int pt_init(PCIBus *e_bus, const char *direct_pci) { - int seg, b, d, f, php_slot = 0; + int seg, b, d, f, php_slot = 0, status = -1; struct pt_dev *pt_dev; struct pci_access *pci_access; char *vslots; @@ -3814,8 +3814,7 @@ int pt_init(PCIBus *e_bus, const char *direct_pci) if ( pt_dev == NULL ) { PT_LOG("Error: Registration failed (%02x:%02x.%x)\n", b, d, f); - free(direct_pci_head); - return -1; + goto err; } /* Record the virtual slot info */ @@ -3834,10 +3833,11 @@ int pt_init(PCIBus *e_bus, const char *direct_pci) /* Write virtual slots info to xenstore for Control panel use */ xenstore_write_vslots(vslots); + status = 0; +err: qemu_free(vslots); free(direct_pci_head); - /* Success */ - return 0; + return status; }