⬢ DragonFlyBSD Kernel Audit
DF-5179 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/misc/atkbd/atkbd_isa.c
+++ b/sys/dev/misc/atkbd/atkbd_isa.c
@@ -118,8 +118,21 @@
 	/* declare our interrupt handler */
 	rid = 0;
 	sc->intr = bus_alloc_legacy_irq_resource(dev, &rid, irq, RF_ACTIVE);
-	BUS_SETUP_INTR(device_get_parent(dev), dev, sc->intr, INTR_MPSAFE,
-		       atkbd_isa_intr, kbd, &sc->ih, NULL, NULL);
+	if (sc->intr == NULL) {
+		device_printf(dev, "unable to allocate IRQ %d\n", (int)irq);
+		return (ENXIO);
+	}
+	error = BUS_SETUP_INTR(device_get_parent(dev), dev, sc->intr,
+			       INTR_MPSAFE, atkbd_isa_intr, kbd, &sc->ih,
+			       NULL, NULL);
+	if (error) {
+		device_printf(dev, "unable to setup IRQ %d: %d\n", (int)irq,
+			      error);
+		bus_release_resource(dev, SYS_RES_IRQ, rid, sc->intr);
+		sc->intr = NULL;
+		sc->ih = NULL;
+		return (error);
+	}
 
 	return 0;
 }