⬢ DragonFlyBSD Kernel Audit
DF-5158 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/disk/nata/chipsets/ata-ahci.c b/sys/dev/disk/nata/chipsets/ata-ahci.c
--- a/sys/dev/disk/nata/chipsets/ata-ahci.c
+++ b/sys/dev/disk/nata/chipsets/ata-ahci.c
@@ -85,6 +85,7 @@
     if (!ctlr->r_irq) {
 	if (ata_setup_interrupt(dev, ata_generic_intr)) {
 	    bus_release_resource(dev, ctlr->r_type2, ctlr->r_rid2, ctlr->r_res2);
+	    ctlr->r_res2 = NULL;
 	    return ENXIO;
 	}
     }
@@ -94,6 +95,7 @@
     /* reset controller */
     if ((error = ata_ahci_ctlr_reset(dev)) != 0) {
 	bus_release_resource(dev, ctlr->r_type2, ctlr->r_rid2, ctlr->r_res2);
+	ctlr->r_res2 = NULL;
 	return (error);
     }
 
diff --git a/sys/dev/disk/nata/chipsets/ata-ati.c b/sys/dev/disk/nata/chipsets/ata-ati.c
--- a/sys/dev/disk/nata/chipsets/ata-ati.c
+++ b/sys/dev/disk/nata/chipsets/ata-ati.c
@@ -110,7 +110,7 @@
 	if ((pci_get_subclass(dev) == PCIS_STORAGE_SATA) &&
 	    (pci_read_config(dev, PCIR_PROGIF, 1) == PCIP_STORAGE_SATA_AHCI_1_0)) {
 	    ctlr->setmode = ata_sata_setmode;
-	    if (ata_ahci_chipinit(dev) != ENXIO)
+	    if (ata_ahci_chipinit(dev) == 0)
 		return 0;
 	}
     }