x86/tsc: Verify TSC_ADJUST from idle
authorThomas Gleixner <tglx@linutronix.de>
Sat, 19 Nov 2016 13:47:37 +0000 (13:47 +0000)
committerThomas Gleixner <tglx@linutronix.de>
Tue, 29 Nov 2016 18:23:16 +0000 (19:23 +0100)
commit1d0095feea591bbd94f35d8a98aed746319783e1
tree6ebcaa4abfcc9a31ae7c968059ce0ed3f60d2ae7
parent8b223bc7abe0e30e8d297a24ee6c6c07ef8d0bb9
x86/tsc: Verify TSC_ADJUST from idle

When entering idle, it's a good oportunity to verify that the TSC_ADJUST
MSR has not been tampered with (BIOS hiding SMM cycles). If tampering is
detected, emit a warning and restore it to the previous value.

This is especially important for machines, which mark the TSC reliable
because there is no watchdog clocksource available (SoCs).

This is not sufficient for HPC (NOHZ_FULL) situations where a CPU never
goes idle, but adding a timer to do the check periodically is not an option
either. On a machine, which has this issue, the check triggeres right
during boot, so there is a decent chance that the sysadmin will notice.

Rate limit the check to once per second and warn only once per cpu.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ingo Molnar <mingo@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Link: http://lkml.kernel.org/r/20161119134017.732180441@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/include/asm/tsc.h
arch/x86/kernel/process.c
arch/x86/kernel/tsc_sync.c