• Arnd Bergmann's avatar
    efi/cper: Avoid using get_seconds() · 7bb49709
    Arnd Bergmann authored
    get_seconds() is deprecated because of the 32-bit time overflow
    in y2038/y2106 on 32-bit architectures. The way it is used in
    cper_next_record_id() causes an overflow in 2106 when unsigned UTC
    seconds overflow, even on 64-bit architectures.
    
    This starts using ktime_get_real_seconds() to give us more than 32 bits
    of timestamp on all architectures, and then changes the algorithm to use
    39 bits for the timestamp after the y2038 wrap date, plus an always-1
    bit at the top. This gives us another 127 epochs of 136 years, with
    strictly monotonically increasing sequence numbers across boots.
    
    This is almost certainly overkill, but seems better than just extending
    the deadline from 2038 to 2106.
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-efi@vger.kernel.org
    Link: http://lkml.kernel.org/r/20180711094040.12506-5-ard.biesheuvel@linaro.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    7bb49709
cper.c 17.7 KB