public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Preventing 32-bit time_t overflow
@ 2015-04-09 16:45 Miroslav Lichvar
  2015-04-09 17:05 ` John Stultz
  0 siblings, 1 reply; 8+ messages in thread
From: Miroslav Lichvar @ 2015-04-09 16:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: John Stultz, Thomas Gleixner, Prarit Bhargava, Richard Cochran

I did a test to see what happens on a system when 32-bit time_t
overflows. While the kernel seems to continue running without big
problems and it's possible to set the clock back to a time before the
overflow, some applications are not so good, they are burning CPU, the
system log is getting filled, it looks like an admin's nightmare.

I'm not sure how many of them are bugs in math with time_t and how
many are due to unexpected results from system calls like setting
timers with the ABSTIME flag to time before 1970, but I think it would
be pretty unrealistic to expect all applications to be able to handle
all the problems that can happen when time_t overflows or is close to
the overflow.

The trouble is this can be exploited with unauthenticated NTP or PTP.
With a spoofed reply the clock can be set close to the overflow. Some
NTP/PTP implementations don't allow (large) steps after the initial
synchronization, so a system that's already running with good time
might be safe, but there are some implementations where the clock can
be set to any value at any time. Also, a lot of people are running
ntpdate or similar from cron.

I'm wondering if this is something that would make sense to address
in the kernel, at least for now.

I was thinking about reserving an interval (e.g. month or year) before
the overflow where the time would be considered invalid and the clock
couldn't be set to it. In the time accumulation would be a check
if the time is still valid and if not, the clock would be set back by
day, month or year as if adjtimex(ADJ_SETOFFSET) was called, so the
overflow never actually happens and there is always some room for
calculations around current time. It could be configurable, to allow
people to test the kernel and applications for the overflow.

What do you think?

-- 
Miroslav Lichvar

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-04-16  7:56 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-04-09 16:45 Preventing 32-bit time_t overflow Miroslav Lichvar
2015-04-09 17:05 ` John Stultz
2015-04-15 15:41   ` [RFC][PATCH] timekeeping: Limit system time to prevent " Miroslav Lichvar
2015-04-15 16:02     ` Arnd Bergmann
2015-04-15 16:17     ` Justin Keller
2015-04-16  7:56       ` Miroslav Lichvar
2015-04-15 21:31     ` One Thousand Gnomes
2015-04-16  7:54       ` Miroslav Lichvar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox