DragonFlyBSD Kernel Audit
DF-1052 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/bus/cam/scsi/scsi_sg.c b/sys/bus/cam/scsi/scsi_sg.c
--- a/sys/bus/cam/scsi/scsi_sg.c
+++ b/sys/bus/cam/scsi/scsi_sg.c
@@ -569,7 +569,10 @@
 		error = copyout(&req, ap->a_data, sizeof(req));
 		if ((error == 0) && (csio->ccb_h.status & CAM_AUTOSNS_VALID)
 		    && (req.sbp != NULL)) {
-			req.sb_len_wr = req.mx_sb_len - csio->sense_resid;
+			if (csio->sense_resid >= req.mx_sb_len)
+				req.sb_len_wr = 0;
+			else
+				req.sb_len_wr = req.mx_sb_len - csio->sense_resid;
 			error = copyout(&csio->sense_data, req.sbp,
 					req.sb_len_wr);
 		}