Unable to move system time back on recent Core i7 systems

From: LuboÅ DoleÅel
Date: Tue Aug 29 2017 - 15:15:59 EST


Hello,

I'm hitting a strange bug on some of my Linux systems with various 4.x kernels.

I cannot set the system time to anything before the current system time.

This includes ntpd not being able to keep the clock in sync if the system clock is a little too fast. So it's not limited to just setting the time back to the 90s, but it actually breaks time synchronization on my server system.

Essentially, settimeofday() and clock_settime() system calls succeed, but any subsequent gettimeofday() etc. call will return unaltered time.

E.g.:

$ sudo date -s 1998-08-01
Sat Aug 1 00:00:00 CEST 1998
$ date
Tue Aug 29 20:59:25 CEST 2017

I have been able to reproduce the problem on these CPUs:

* Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz
* Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz

I *cannot* reproduce the problem on these CPUs, even if I boot the same kernel version as on the CPUs above:

* Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
* Intel(R) Core(TM) i5-3570K CPU @ 3.40GHz
* Various even older CPUs

I tried to google the problem, but turned up with nothing. This brings several questions:

1) What the hell?
2) Am I the only one having this problem?
3) Can the Linux kernel developers possibly do something about this, if this problem is confirmed?

Thanks,
Lubos