⬢ DragonFlyBSD Kernel Audit
DF-5842 / fix.diff
← back to finding ↓ download raw
--- a/sys/kern/sys_generic.c
+++ b/sys/kern/sys_generic.c
@@ -808,6 +808,9 @@
 		error = copyin(uap->tv, &ktv, sizeof (ktv));
 		if (error)
 			return (error);
+		if (ktv.tv_sec < 0 || ktv.tv_usec < 0 ||
+		    ktv.tv_usec >= 1000000)
+			return (EINVAL);
 		TIMEVAL_TO_TIMESPEC(&ktv, &kts);
 		ktsp = &kts;
 	} else {
@@ -843,6 +846,9 @@
 		error = copyin(uap->ts, &kts, sizeof (kts));
 		if (error)
 			return (error);
+		if (kts.tv_sec < 0 || kts.tv_nsec < 0 ||
+		    kts.tv_nsec >= 1000000000)
+			return (EINVAL);
 		ktsp = &kts;
 	} else {
 		ktsp = NULL;
@@ -1272,6 +1278,9 @@
 		error = copyin(uap->ts, &kts, sizeof (kts));
 		if (error)
 			return (error);
+		if (kts.tv_sec < 0 || kts.tv_nsec < 0 ||
+		    kts.tv_nsec >= 1000000000)
+			return (EINVAL);
 		ktsp = &kts;
 	} else {
 		ktsp = NULL;