⬢ DragonFlyBSD Kernel Audit
DF-4280 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/disk/ccd/ccd.c
+++ b/sys/dev/disk/ccd/ccd.c
@@ -1316,6 +1316,13 @@
 		if ((error = ccdlock(cs)) != 0)
 			return (error);
 
+		if (ccio->ccio_ileave < 0) {
+			kprintf("ccd%d: invalid interleave %d\n",
+				unit, ccio->ccio_ileave);
+			ccdunlock(cs);
+			return (EINVAL);
+		}
+
 		if (ccio->ccio_ndisks > CCD_MAXNDISKS) {
 			ccdunlock(cs);
 			return (EINVAL);
@@ -1431,7 +1438,7 @@
 		if ((error = ccdlock(cs)) != 0)
 			return (error);
 
-		if (dev_drefs(cs->sc_dev) > 1) {
+		if (disk_getopencount(&cs->sc_disk) > 1) {
 			ccdunlock(cs);
 			return (EBUSY);
 		}