Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Nov 2017 18:18:18 +0000 (UTC)
From:      Ed Maste <emaste@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r325825 - head/sys/kern
Message-ID:  <201711141818.vAEIIILV078187@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: emaste
Date: Tue Nov 14 18:18:18 2017
New Revision: 325825
URL: https://svnweb.freebsd.org/changeset/base/325825

Log:
  disallow clock_settime too far in the future to avoid panic
  
  clock_ts_to_ct has a KASSERT that the converted year fits into four
  digits.  By default (sysctl debug.allow_insane_settime is 0) the kernel
  disallows a time too far in the future, using a value of 9999 366-day
  years.  However, clock_settime is epoch-relative and the assertion will
  fail with a tv_sec corresponding to some 8030 years.
  
  Avoid trying to be too clever, and just use a limit of 8000 365-day
  years past the epoch.
  
  Submitted by:	Heqing Yan <scottieyan@gmail.com>
  Reported by:	Syzkaller (https://github.com/google/syzkaller)
  MFC after:	1 week
  Sponsored by:	The FreeBSD Foundation

Modified:
  head/sys/kern/kern_time.c

Modified: head/sys/kern/kern_time.c
==============================================================================
--- head/sys/kern/kern_time.c	Tue Nov 14 18:17:23 2017	(r325824)
+++ head/sys/kern/kern_time.c	Tue Nov 14 18:18:18 2017	(r325825)
@@ -408,7 +408,7 @@ kern_clock_settime(struct thread *td, clockid_t clock_
 	if (ats->tv_nsec < 0 || ats->tv_nsec >= 1000000000 ||
 	    ats->tv_sec < 0)
 		return (EINVAL);
-	if (!allow_insane_settime && ats->tv_sec > 9999ULL * 366 * 24 * 60 * 60)
+	if (!allow_insane_settime && ats->tv_sec > 8000ULL * 365 * 24 * 60 * 60)
 		return (EINVAL);
 	/* XXX Don't convert nsec->usec and back */
 	TIMESPEC_TO_TIMEVAL(&atv, ats);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201711141818.vAEIIILV078187>