Skip to content

ntp bug fix

Richard Cochran lkml 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest1 patch 7 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/1ntp: advertise correct TAI offset during leap secondkernel/time/ntp.c+1 -17 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [PATCH 0/1] ntp bug fix

I have been cooking up a patch series to keep the core time in TAI instead of UTC. In the course of that work I noticed a bug in the current NTP code. During a leap second insertion, the kernel will advertise the wrong TAI offset.

There is a nice explanation of this issue in the NIST leap second list, which I quote below. With reference to that, the Linux kernel handles the UTC time value like in the first case, but sets the TAI offset as in the second case, resulting in a discontinuity in the apparent TAI time.

* Excerpt from ftp://time.nist.gov/pub/leap-seconds.list

If your system keeps time as the number of seconds since some epoch (e.g., NTP timestamps), then the algorithm for assigning a UTC time stamp to an event that happens during a positive leap second is not well defined. The official name of that leap second is 23:59:60, but there is no way of representing that time in these systems.

Many systems of this type effectively stop the system clock for one second during the leap second and use a time that is equivalent to 23:59:59 UTC twice. For these systems, the corresponding TAI timestamp would be obtained by advancing to the next entry in the following table when the time equivalent to 23:59:59 UTC is used for the second time. Thus the leap second which occurred on 30 June 1972 at 23:59:59 UTC would have TAI timestamps computed as follows:

   30 June 1972 23:59:59 (2287785599, first time):  TAI= UTC + 10 seconds
   30 June 1972 23:59:60 (2287785599,second time):  TAI= UTC + 11 seconds
   1  July 1972 00:00:00 (2287785600)               TAI= UTC + 11 seconds

If your system realizes the leap second by repeating 00:00:00 UTC twice (this is possible but not usual), then the advance to the next entry in the table must occur the second time that a time equivlent to 00:00:00 UTC is used. Thus, using the same example as above:

   30 June 1972 23:59:59 (2287785599):              TAI= UTC + 10 seconds
   30 June 1972 23:59:60 (2287785600, first time):  TAI= UTC + 10 seconds
   1  July 1972 00:00:00 (2287785600,second time):  TAI= UTC + 11 seconds

in both cases the use of timestamps based on TAI produces a smooth time scale with no discontinuity in the time interval.

Richard Cochran (1):
ntp: advertise correct TAI offset during leap second

 kernel/time/ntp.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
Signature · 1 line
1.7.2.5