ksummit.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: David Howells <dhowells@redhat.com>
Cc: john.stultz@linaro.org, ksummit-discuss@lists.linuxfoundation.org
Subject: Re: [Ksummit-discuss] Leap second handling
Date: Tue, 15 Dec 2015 13:12:03 +0100	[thread overview]
Message-ID: <2151085.9YAhiz9GYL@wuerfel> (raw)
In-Reply-To: <10141.1450179238@warthog.procyon.org.uk>

On Tuesday 15 December 2015 11:33:58 David Howells wrote:
> I know it's a bit late for the KS, but should we alter the interpretation of
> the time-as-seconds-since-1970 in the kernel to include leap seconds?
> 
> The reason I ask is that we have to deal with X.509 certificates in the kernel,
> and the certificate can have dates encoded using GeneralizedTime ASN.1 objects.
> These are formatted as per ISO 8601.  ISO 8601 encodes leap seconds as hh:mm:60
> - so it's possible that I can see this in cert I have to deal with, and as such
> I must permit it.  I turn the date and time components into a time64_t with
> mktime64() - but that doesn't know about leap seconds, however.

Adding John Stultz to Cc explicitly, he probably knows best about those things.

> So the question is how to deal with it.  I can see three obvious ways:
> 
>  (1) Treat it the same as hh:mm:59.
> 
>  (2) Treat it the same as hh:mm+1:00, rolling over the carry through to the
>      year if necessary.
> 
>  (3) Assign specific time_t values to leap seconds in mktime64().  There's a
>      table of them here:
> 
> 	https://en.wikipedia.org/wiki/Leap_second
> 
>      It wouldn't be hard to do within just the kernel, but this would put the
>      kernel at odds with userspace to the tune of nearly half a minute at the
>      current time.  It might be sufficient to just fix the libc's in userspace
>      - but you can bet there's someone somewhere who checks that seconds
>      doesn't exceed 59.
> 
>      The kernel would also need to tell libc whether or not the time value it
>      gets includes leap seconds.
> 
> Any thoughts?

The kernel supports CLOCK_TAI as a timebase. While I think some operating systems
use this as the default clock, we don't do that, and I assume we don't want
to change this.

ktime_get_clocktai() will return the time in this format, and the timekeeper
stores the offset between boottime and TAI internally, and updates it whenever
a leap second happens, so if you set a timer in CLOCK_TAI, it will expire at
the right moment.

What I think we don't do at all in the kernel is to keep track of past (or
even future) leap seconds, so if you need to encode a date in the past,
the kernel has no idea what the difference between UTC and TAI was at the
time, and if you encode a time in the future, you don't know if we will
insert a leap second before you get to that time. I think these are the
harder questions to solve first if you want to handle the X.509 certificates
right, before we get to the question of what happens for dates *on* the
leap second.

	Arnd

  reply	other threads:[~2015-12-15 12:17 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-15 11:33 David Howells
2015-12-15 12:12 ` Arnd Bergmann [this message]
2015-12-15 14:15   ` Alexandre Belloni
2015-12-16  5:12     ` John Stultz
2015-12-17  0:32     ` David Howells
2015-12-17  0:44       ` John Stultz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2151085.9YAhiz9GYL@wuerfel \
    --to=arnd@arndb.de \
    --cc=dhowells@redhat.com \
    --cc=john.stultz@linaro.org \
    --cc=ksummit-discuss@lists.linuxfoundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox