y2038: elfcore: Use __kernel_old_timeval for process times
authorArnd Bergmann <arnd@arndb.de>
Thu, 23 Nov 2017 12:46:33 +0000 (13:46 +0100)
committerArnd Bergmann <arnd@arndb.de>
Fri, 15 Nov 2019 13:38:29 +0000 (14:38 +0100)
commite2bb80d55d75ce7fd300fcd8d47a97413c3cd322
tree05f05ef0e3b8b8125ed1834c05f0c2f465860257
parent693737b6cc2edc258040b28462a90b63503394d9
y2038: elfcore: Use __kernel_old_timeval for process times

We store elapsed time for a crashed process in struct elf_prstatus using
'timeval' structures. Once glibc starts using 64-bit time_t, this becomes
incompatible with the kernel's idea of timeval since the structure layout
no longer matches on 32-bit architectures.

This changes the definition of the elf_prstatus structure to use
__kernel_old_timeval instead, which is hardcoded to the currently used
binary layout. There is no risk of overflow in y2038 though, because
the time values are all relative times, and can store up to 68 years
of process elapsed time.

There is a risk of applications breaking at build time when they
use the new kernel headers and expect the type to be exactly 'timeval'
rather than a structure that has the same fields as before. Those
applications have to be modified to deal with 64-bit time_t anyway.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
arch/mips/kernel/binfmt_elfn32.c
arch/mips/kernel/binfmt_elfo32.c
fs/binfmt_elf.c
fs/binfmt_elf_fdpic.c
fs/compat_binfmt_elf.c
include/uapi/linux/elfcore.h