⬢ DragonFlyBSD Kernel Audit
DF-4242 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/raid/dpt/dpt_scsi.c b/sys/dev/raid/dpt/dpt_scsi.c
index ebc9e1a..8e566ea 100644
--- a/sys/dev/raid/dpt/dpt_scsi.c
+++ b/sys/dev/raid/dpt/dpt_scsi.c
@@ -1563,7 +1563,13 @@ dpt_intr(void *arg)
 
 				kprintf("dpt%d: >>---->>  This is incomplete, "
 				       "fix me....  <<----<<", dpt->unit);
-				panic("DPT Rebooted");
+				/* The just-reset signature is read straight from HBA
+				 * registers.  A rebooting (or hostile) controller must not
+				 * be able to panic the kernel: clear the interrupt, keep
+				 * draining, and let dpttimeout()/CAM time out and requeue
+				 * the in-flight commands. */
+				status = dpt_inb(dpt, HA_RSTATUS);
+				continue;
 
 			}
 		}