⬢ DragonFlyBSD Kernel Audit
DF-2473 / fix.diff
← back to finding ↓ download raw
--- /home/maxx/dfbsd/dfbsd/sys/dev/disk/isp/isp_freebsd.c	2026-06-29 12:51:18.000000000 +0000
+++ sys/dev/disk/isp/isp_freebsd.c	2026-10-24 09:11:15.579214449 +0000
@@ -1923,8 +1923,16 @@
 	}
 
 	atiop->init_id = GET_IID_VAL(aep->at_iid);
-	atiop->cdb_len = aep->at_cdblen;
-	ISP_MEMCPY(atiop->cdb_io.cdb_bytes, aep->at_cdb, aep->at_cdblen);
+	{
+		size_t cdblen = aep->at_cdblen;
+		if (cdblen > sizeof (atiop->cdb_io.cdb_bytes)) {
+			isp_prt(isp, ISP_LOGWARN, "overlong ATIO CDB %u",
+			    aep->at_cdblen);
+			cdblen = sizeof (atiop->cdb_io.cdb_bytes);
+		}
+		atiop->cdb_len = cdblen;
+		ISP_MEMCPY(atiop->cdb_io.cdb_bytes, aep->at_cdb, cdblen);
+	}
 	atiop->ccb_h.status = CAM_CDB_RECVD;
 	/*
 	 * Construct a tag 'id' based upon tag value (which may be 0..255)