timekeeping/vsyscall: Prevent math overflow in BOOTTIME update
The VDSO update for CLOCK_BOOTTIME has a overflow issue as it shifts the
nanoseconds based boot time offset left by the clocksource shift. That
overflows once the boot time offset becomes large enough. As a consequence
CLOCK_BOOTTIME in the VDSO becomes a random number causing applications to
misbehave.
Fix it by storing a timespec64 representation of the offset when boot time
is adjusted and add that to the MONOTONIC base time value in the vdso data
page. Using the timespec64 representation avoids a 64bit division in the
update code.
Change-Id: I4bee5af4e14ed1bf6c9623f5cb70f1542d7cc700
Fixes: 44f57d788e7d ("timekeeping: Provide a generic update_vsyscall() implementation")
Reported-by:
Chris Clayton <chris2553@googlemail.com>
Signed-off-by:
Thomas Gleixner <tglx@linutronix.de>
Tested-by:
Chris Clayton <chris2553@googlemail.com>
Tested-by:
Vincenzo Frascino <vincenzo.frascino@arm.com>
Link: https://lkml.kernel.org/r/alpine.DEB.2.21.1908221257580.1983@nanos.tec.linutronix.de
Git-commit: b99328a60a482108f5195b4d611f90992ca016ba
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Signed-off-by:
Prateek Sood <prsood@codeaurora.org>
Loading
Please register or sign in to comment