DragonFlyBSD Kernel Audit
DF-1466 / 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
--- a/sys/dev/raid/dpt/dpt_scsi.c
+++ b/sys/dev/raid/dpt/dpt_scsi.c
@@ -855,7 +855,7 @@
 		    ? 1 : 0;
 		eccb->DataOut = (ccb->ccb_h.flags & CAM_DIR_OUT) ? 1 : 0;
 		eccb->DataIn = (ccb->ccb_h.flags & CAM_DIR_IN) ? 1 : 0;
-		eccb->reqlen = csio->sense_len;
+		eccb->reqlen = imin(csio->sense_len, (int)sizeof(struct scsi_sense_data));
 		eccb->cp_id = ccb->ccb_h.target_id;
 		eccb->cp_channel = cam_sim_bus(sim);
 		eccb->cp_LUN = ccb->ccb_h.target_lun;
@@ -1519,7 +1519,7 @@
 		 || dpt->sp->ccb_busaddr >= dpt->dpt_ccb_busend) {
 			kprintf("Encountered bogus status packet\n");
 			status = dpt_inb(dpt, HA_RSTATUS);
-			return;
+			continue;
 		}
 
 		dccb = dptccbptov(dpt, dpt->sp->ccb_busaddr);