DF-5842 / fix.diff
--- 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; |