a939e817aa
When switching from a vsyscall capable to a non-vsyscall capable clocksource, there was a small race, where the last vsyscall gettimeofday before the switch might return a invalid time value using the new non-vsyscall enabled clocksource values after the switch is complete. This is due to the vsyscall code checking the vclock_mode once outside of the seqcount protected section. After it reads the vclock mode, it doesn't re-check that the sampled clock data that is obtained in the seqcount critical section still matches. The fix is to sample vclock_mode inside the protected section, and as long as it isn't VCLOCK_NONE, return the calculated value. If it has changed and is now VCLOCK_NONE, fall back to the syscall gettime calculation. v2: * Cleanup checks as suggested by tglx * Also fix same issue present in gettimeofday path CC: Andy Lutomirski <luto@amacapital.net> CC: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: John Stultz <john.stultz@linaro.org> |
||
---|---|---|
.. | ||
vdso32 | ||
.gitignore | ||
checkundef.sh | ||
Makefile | ||
vclock_gettime.c | ||
vdso-layout.lds.S | ||
vdso-note.S | ||
vdso.lds.S | ||
vdso.S | ||
vdso32-setup.c | ||
vdso32.S | ||
vgetcpu.c | ||
vma.c |