• Deepa Dinamani's avatar
    Input: extend usable life of event timestamps to 2106 on 32 bit systems · 152194fe
    Deepa Dinamani authored
    The input events use struct timeval to store event time, unfortunately
    this structure is not y2038 safe and is being replaced in kernel with
    y2038 safe structures.
    
    Because of ABI concerns we can not change the size or the layout of
    structure input_event, so we opt to re-interpreting the 'seconds' part
    of timestamp as an unsigned value, effectively doubling the range of
    values, to year 2106.
    
    Newer glibc that has support for 32 bit applications to use 64 bit
    time_t supplies __USE_TIME_BITS64 define [1], that we can use to present
    the userspace with updated input_event layout. The updated layout will
    cause the compile time breakage, alerting applications and distributions
    maintainers to the issue. Existing 32 binaries will continue working
    without any changes until 2038.
    
    Ultimately userspace applications should switch to using monotonic or
    boot time clocks, as realtime clock is not very well suited for input
    event timestamps as it can go backwards (see a80b83b7 "Input: evdev -
    add CLOCK_BOOTTIME support" by by John Stultz). With monotonic clock the
    practical range of reported times will always fit into the pair of 32
    bit values, as we do not expect any system to stay up for a hundred
    years without a single reboot.
    
    [1] https://sourceware.org/glibc/wiki/Y2038ProofnessDesignSuggested-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarDeepa Dinamani <deepa.kernel@gmail.com>
    Acked-by: default avatarPeter Hutterer <peter.hutterer@who-t.net>
    Patchwork-Id: 10148083
    Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
    152194fe
uinput.c 24.5 KB