⬢ DragonFlyBSD Kernel Audit
DF-2433 / fix.diff
← back to finding ↓ download raw
# DF-2433 fix (authored post-verification; not applied to sys/)
--- a/sys/dev/disk/ccd/ccd.c
+++ b/sys/dev/disk/ccd/ccd.c
@@ -1313,6 +1313,10 @@ ccdioctl(struct dev_ioctl_args *ap)
 	case CCDIOCSET:
 		if (cs->sc_flags & CCDF_INITED)
 			return (EBUSY);
 
 		if ((ap->a_fflag & FWRITE) == 0)
 			return (EBADF);
 
 		if ((error = ccdlock(cs)) != 0)
 			return (error);
+		/* DF-2433: re-check under the lock (TOCTOU) */
+		if (cs->sc_flags & CCDF_INITED) {
+			ccdunlock(cs);
+			return (EBUSY);
+		}