DragonFlyBSD Kernel Audit
DF-2063 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/disk/advansys/adv_pci.c b/sys/dev/disk/advansys/adv_pci.c
--- a/sys/dev/disk/advansys/adv_pci.c
+++ b/sys/dev/disk/advansys/adv_pci.c
@@ -293,8 +293,15 @@
 		return ENXIO;
 	}
 
-	adv_attach(adv);
-	return 0;
+	error = adv_attach(adv);
+	if (error != 0) {
+		bus_teardown_intr(dev, irqres, ih);
+		bus_release_resource(dev, SYS_RES_IRQ, irqrid, irqres);
+		bus_release_resource(dev, SYS_RES_IOPORT, rid, iores);
+		adv_free(adv);
+		return (error);
+	}
+	return (0);
 }
 
 static device_method_t adv_pci_methods[] = {