[GIT pull] x86/pti - The final bits and fixes

2018-01-17 Thread Thomas Gleixner
Linus,

please pull the latest x86-pti-for-linus git tree from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-pti-for-linus

This last update contains:

  - An objtool fix to prevent a segfault with the gold linker by
changing the invocation order. That's not just for gold, it's a
general robustness improvement.

  - An improved error message for objtool which spares tearing hairs.

  - Make KASAN fail loudly if there is not enough memory instead of
oopsing at some random place later

  - RSB fill on context switch to prevent RSB underflow and speculation
through other units.

  - Make the retpoline/RSB functionality work reliably for both Intel and
AMD

  - Add retpoline to the module version magic so mismatch can be detected

  - A small (non-fix) update for cpufeatures which prevents cpu feature
clashing for the upcoming extra mitigation bits to easy backporting.

The objtool invocation order change results in a trivial merge
conflict. Just make sure objtool is invoked before modversions.

Thanks,

tglx

-->
Andi Kleen (1):
  module: Add retpoline tag to VERMAGIC

Andrey Ryabinin (1):
  x86/kasan: Panic if there is not enough memory to boot

David Woodhouse (1):
  x86/retpoline: Fill RSB on context switch for affected CPUs

Josh Poimboeuf (2):
  objtool: Fix seg fault with gold linker
  objtool: Improve error message for bad file argument

Paolo Bonzini (1):
  x86/cpufeature: Move processor tracing out of scattered features

Tom Lendacky (1):
  x86/retpoline: Add LFENCE to the retpoline/RSB filling RSB macros


 arch/x86/entry/entry_32.S| 11 +++
 arch/x86/entry/entry_64.S| 11 +++
 arch/x86/include/asm/cpufeatures.h   |  3 ++-
 arch/x86/include/asm/nospec-branch.h |  6 +-
 arch/x86/kernel/cpu/bugs.c   | 36 
 arch/x86/kernel/cpu/scattered.c  |  1 -
 arch/x86/mm/kasan_init_64.c  | 24 ++--
 include/linux/vermagic.h |  8 +++-
 scripts/Makefile.build   | 14 ++
 tools/objtool/elf.c  |  4 +++-
 10 files changed, 99 insertions(+), 19 deletions(-)

diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
index a1f28a54f23a..60c4c342316c 100644
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -244,6 +244,17 @@ ENTRY(__switch_to_asm)
movl%ebx, PER_CPU_VAR(stack_canary)+stack_canary_offset
 #endif
 
+#ifdef CONFIG_RETPOLINE
+   /*
+* When switching from a shallower to a deeper call stack
+* the RSB may either underflow or use entries populated
+* with userspace addresses. On CPUs where those concerns
+* exist, overwrite the RSB with entries which capture
+* speculative execution to prevent attack.
+*/
+   FILL_RETURN_BUFFER %ebx, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW
+#endif
+
/* restore callee-saved registers */
popl%esi
popl%edi
diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
index 59874bc1aed2..d54a0ede61d1 100644
--- a/arch/x86/entry/entry_64.S
+++ b/arch/x86/entry/entry_64.S
@@ -487,6 +487,17 @@ ENTRY(__switch_to_asm)
movq%rbx, PER_CPU_VAR(irq_stack_union)+stack_canary_offset
 #endif
 
+#ifdef CONFIG_RETPOLINE
+   /*
+* When switching from a shallower to a deeper call stack
+* the RSB may either underflow or use entries populated
+* with userspace addresses. On CPUs where those concerns
+* exist, overwrite the RSB with entries which capture
+* speculative execution to prevent attack.
+*/
+   FILL_RETURN_BUFFER %r12, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW
+#endif
+
/* restore callee-saved registers */
popq%r15
popq%r14
diff --git a/arch/x86/include/asm/cpufeatures.h 
b/arch/x86/include/asm/cpufeatures.h
index f275447862f4..25b9375c1484 100644
--- a/arch/x86/include/asm/cpufeatures.h
+++ b/arch/x86/include/asm/cpufeatures.h
@@ -206,11 +206,11 @@
 #define X86_FEATURE_RETPOLINE  ( 7*32+12) /* Generic Retpoline 
mitigation for Spectre variant 2 */
 #define X86_FEATURE_RETPOLINE_AMD  ( 7*32+13) /* AMD Retpoline mitigation 
for Spectre variant 2 */
 #define X86_FEATURE_INTEL_PPIN ( 7*32+14) /* Intel Processor Inventory 
Number */
-#define X86_FEATURE_INTEL_PT   ( 7*32+15) /* Intel Processor Trace */
 #define X86_FEATURE_AVX512_4VNNIW  ( 7*32+16) /* AVX-512 Neural Network 
Instructions */
 #define X86_FEATURE_AVX512_4FMAPS  ( 7*32+17) /* AVX-512 Multiply 
Accumulation Single precision */
 
 #define X86_FEATURE_MBA( 7*32+18) /* Memory Bandwidth 
Allocation */
+#define X86_FEATURE_RSB_CTXSW  ( 7*32+19) /* Fill RSB on context 
switches */
 
 /* Virtualization flags: Linux defined, word 8 */
 #define X86_FEATURE_TPR_SHADOW ( 8*32+ 0) /* 

[GIT pull] x86/pti - The final bits and fixes

2018-01-17 Thread Thomas Gleixner
Linus,

please pull the latest x86-pti-for-linus git tree from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-pti-for-linus

This last update contains:

  - An objtool fix to prevent a segfault with the gold linker by
changing the invocation order. That's not just for gold, it's a
general robustness improvement.

  - An improved error message for objtool which spares tearing hairs.

  - Make KASAN fail loudly if there is not enough memory instead of
oopsing at some random place later

  - RSB fill on context switch to prevent RSB underflow and speculation
through other units.

  - Make the retpoline/RSB functionality work reliably for both Intel and
AMD

  - Add retpoline to the module version magic so mismatch can be detected

  - A small (non-fix) update for cpufeatures which prevents cpu feature
clashing for the upcoming extra mitigation bits to easy backporting.

The objtool invocation order change results in a trivial merge
conflict. Just make sure objtool is invoked before modversions.

Thanks,

tglx

-->
Andi Kleen (1):
  module: Add retpoline tag to VERMAGIC

Andrey Ryabinin (1):
  x86/kasan: Panic if there is not enough memory to boot

David Woodhouse (1):
  x86/retpoline: Fill RSB on context switch for affected CPUs

Josh Poimboeuf (2):
  objtool: Fix seg fault with gold linker
  objtool: Improve error message for bad file argument

Paolo Bonzini (1):
  x86/cpufeature: Move processor tracing out of scattered features

Tom Lendacky (1):
  x86/retpoline: Add LFENCE to the retpoline/RSB filling RSB macros


 arch/x86/entry/entry_32.S| 11 +++
 arch/x86/entry/entry_64.S| 11 +++
 arch/x86/include/asm/cpufeatures.h   |  3 ++-
 arch/x86/include/asm/nospec-branch.h |  6 +-
 arch/x86/kernel/cpu/bugs.c   | 36 
 arch/x86/kernel/cpu/scattered.c  |  1 -
 arch/x86/mm/kasan_init_64.c  | 24 ++--
 include/linux/vermagic.h |  8 +++-
 scripts/Makefile.build   | 14 ++
 tools/objtool/elf.c  |  4 +++-
 10 files changed, 99 insertions(+), 19 deletions(-)

diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
index a1f28a54f23a..60c4c342316c 100644
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -244,6 +244,17 @@ ENTRY(__switch_to_asm)
movl%ebx, PER_CPU_VAR(stack_canary)+stack_canary_offset
 #endif
 
+#ifdef CONFIG_RETPOLINE
+   /*
+* When switching from a shallower to a deeper call stack
+* the RSB may either underflow or use entries populated
+* with userspace addresses. On CPUs where those concerns
+* exist, overwrite the RSB with entries which capture
+* speculative execution to prevent attack.
+*/
+   FILL_RETURN_BUFFER %ebx, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW
+#endif
+
/* restore callee-saved registers */
popl%esi
popl%edi
diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
index 59874bc1aed2..d54a0ede61d1 100644
--- a/arch/x86/entry/entry_64.S
+++ b/arch/x86/entry/entry_64.S
@@ -487,6 +487,17 @@ ENTRY(__switch_to_asm)
movq%rbx, PER_CPU_VAR(irq_stack_union)+stack_canary_offset
 #endif
 
+#ifdef CONFIG_RETPOLINE
+   /*
+* When switching from a shallower to a deeper call stack
+* the RSB may either underflow or use entries populated
+* with userspace addresses. On CPUs where those concerns
+* exist, overwrite the RSB with entries which capture
+* speculative execution to prevent attack.
+*/
+   FILL_RETURN_BUFFER %r12, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW
+#endif
+
/* restore callee-saved registers */
popq%r15
popq%r14
diff --git a/arch/x86/include/asm/cpufeatures.h 
b/arch/x86/include/asm/cpufeatures.h
index f275447862f4..25b9375c1484 100644
--- a/arch/x86/include/asm/cpufeatures.h
+++ b/arch/x86/include/asm/cpufeatures.h
@@ -206,11 +206,11 @@
 #define X86_FEATURE_RETPOLINE  ( 7*32+12) /* Generic Retpoline 
mitigation for Spectre variant 2 */
 #define X86_FEATURE_RETPOLINE_AMD  ( 7*32+13) /* AMD Retpoline mitigation 
for Spectre variant 2 */
 #define X86_FEATURE_INTEL_PPIN ( 7*32+14) /* Intel Processor Inventory 
Number */
-#define X86_FEATURE_INTEL_PT   ( 7*32+15) /* Intel Processor Trace */
 #define X86_FEATURE_AVX512_4VNNIW  ( 7*32+16) /* AVX-512 Neural Network 
Instructions */
 #define X86_FEATURE_AVX512_4FMAPS  ( 7*32+17) /* AVX-512 Multiply 
Accumulation Single precision */
 
 #define X86_FEATURE_MBA( 7*32+18) /* Memory Bandwidth 
Allocation */
+#define X86_FEATURE_RSB_CTXSW  ( 7*32+19) /* Fill RSB on context 
switches */
 
 /* Virtualization flags: Linux defined, word 8 */
 #define X86_FEATURE_TPR_SHADOW ( 8*32+ 0) /*