DragonFlyBSD Kernel Audit
DF-1793 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/misc/puc/puc.c b/sys/dev/misc/puc/puc.c
--- a/sys/dev/misc/puc/puc.c
+++ b/sys/dev/misc/puc/puc.c
@@ -233,11 +233,13 @@
 
 	sc->irqres = res;
 	sc->irqrid = rid;
-	irq_setup = BUS_SETUP_INTR(device_get_parent(dev), dev, res,
-				   0, puc_intr, sc,
-				   &sc->intr_cookie, NULL, NULL);
-	if (irq_setup != 0)
-		return (ENXIO);
+	irq_setup = BUS_SETUP_INTR(device_get_parent(dev), dev, res,
+				   0, puc_intr, sc,
+				   &sc->intr_cookie, NULL, NULL);
+	if (irq_setup != 0) {
+		bus_release_resource(dev, SYS_RES_IRQ, rid, res);
+		return (ENXIO);
+	}
 
 	rid = 0;
 	for (i = 0; PUC_PORT_VALID(sc->sc_desc, i); i++) {