DragonFlyBSD Kernel Audit
DF-1695 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/disk/nata/atapi-cam.c b/sys/dev/disk/nata/atapi-cam.c
--- a/sys/dev/disk/nata/atapi-cam.c
+++ b/sys/dev/disk/nata/atapi-cam.c
@@ -429,6 +429,14 @@
 	int tid = ccb_h->target_id;
 
 	CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_SUBTRACE, ("dev reset\n"));
+	lockmgr(&softc->state_lock, LK_EXCLUSIVE);
+	if (softc->atadev[tid] == NULL) {
+		lockmgr(&softc->state_lock, LK_RELEASE);
+		ccb->ccb_h.status = CAM_DEV_NOT_THERE;
+		xpt_done(ccb);
+		return;
+	}
+	lockmgr(&softc->state_lock, LK_RELEASE);
 	ata_controlcmd(softc->atadev[tid]->dev, ATA_DEVICE_RESET, 0, 0, 0);
 	ccb->ccb_h.status = CAM_REQ_CMP;
 	xpt_done(ccb);