]> git.hungrycats.org Git - linux/commitdiff
x86/cpufeatures: Add X86_BUG_CPU_INSECURE
authorThomas Gleixner <tglx@linutronix.de>
Mon, 4 Dec 2017 14:07:33 +0000 (15:07 +0100)
committerBen Hutchings <ben@decadent.org.uk>
Mon, 19 Mar 2018 18:58:28 +0000 (18:58 +0000)
commit a89f040fa34ec9cd682aed98b8f04e3c47d998bd upstream.

Many x86 CPUs leak information to user space due to missing isolation of
user space and kernel space page tables. There are many well documented
ways to exploit that.

The upcoming software migitation of isolating the user and kernel space
page tables needs a misfeature flag so code can be made runtime
conditional.

Add the BUG bits which indicates that the CPU is affected and add a feature
bit which indicates that the software migitation is enabled.

Assume for now that _ALL_ x86 CPUs are affected by this. Exceptions can be
made later.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David Laight <David.Laight@aculab.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Eduardo Valentin <eduval@amazon.com>
Cc: Greg KH <gregkh@linuxfoundation.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Will Deacon <will.deacon@arm.com>
Cc: aliguori@amazon.com
Cc: daniel.gruss@iaik.tugraz.at
Cc: hughd@google.com
Cc: keescook@google.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
[bwh: Backported to 3.2:
 - Assign the first available bug number
 - Adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
arch/x86/include/asm/cpufeature.h
arch/x86/kernel/cpu/common.c

index c54aba9c8624b7ba792ca66f4672ad88d4e51331..95495d07967d0b0f11b64535eb68929598eccf3d 100644 (file)
  */
 #define X86_BUG(x)             (NCAPINTS*32 + (x))
 
+#define X86_BUG_CPU_INSECURE   X86_BUG(0) /* CPU is insecure and needs kernel page table isolation */
+
 #if defined(__KERNEL__) && !defined(__ASSEMBLY__)
 
 #include <asm/asm.h>
index f33ea66982f6bc2656b3af8339ecf9602eaa5988..b71dcb9675b3f2300b028553acf5cc29debc6e1e 100644 (file)
@@ -767,6 +767,9 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c)
 
        if (this_cpu->c_bsp_init)
                this_cpu->c_bsp_init(c);
+
+       /* Assume for now that ALL x86 CPUs are insecure */
+       setup_force_cpu_bug(X86_BUG_CPU_INSECURE);
 }
 
 void __init early_cpu_init(void)