OSDN Git Service

x86/cpuid: Prevent out of bound access in do_clear_cpu_cap()
authorThomas Gleixner <tglx@linutronix.de>
Wed, 18 Oct 2017 17:39:35 +0000 (19:39 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Wed, 18 Oct 2017 18:03:34 +0000 (20:03 +0200)
commit57b8b1a1856adaa849d02d547411a553a531022b
treef57843210c282f869209d183813c4d67a21e0e45
parent73e3a7d2a7c3be29a5a22b85026f6cfa5664267f
x86/cpuid: Prevent out of bound access in do_clear_cpu_cap()

do_clear_cpu_cap() allocates a bitmap to keep track of disabled feature
dependencies. That bitmap is sized NCAPINTS * BITS_PER_INIT. The possible
'features' which can be handed in are larger than this, because after the
capabilities the bug 'feature' bits occupy another 32bit. Not really
obvious...

So clearing any of the misfeature bits, as 32bit does for the F00F bug,
accesses that bitmap out of bounds thereby corrupting the stack.

Size the bitmap proper and add a sanity check to catch accidental out of
bound access.

Fixes: 0b00de857a64 ("x86/cpuid: Add generic table for CPUID dependencies")
Reported-by: kernel test robot <xiaolong.ye@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Borislav Petkov <bp@alien8.de>
Link: https://lkml.kernel.org/r/20171018022023.GA12058@yexl-desktop
arch/x86/kernel/cpu/cpuid-deps.c