| From 7614e913db1f40fff819b36216484dc3808995d4 Mon Sep 17 00:00:00 2001 |
| From: Andi Kleen <ak@linux.intel.com> |
| Date: Thu, 11 Jan 2018 21:46:33 +0000 |
| Subject: x86/retpoline/irq32: Convert assembler indirect jumps |
| |
| From: Andi Kleen <ak@linux.intel.com> |
| |
| commit 7614e913db1f40fff819b36216484dc3808995d4 upstream. |
| |
| Convert all indirect jumps in 32bit irq inline asm code to use non |
| speculative sequences. |
| |
| Signed-off-by: Andi Kleen <ak@linux.intel.com> |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Acked-by: Arjan van de Ven <arjan@linux.intel.com> |
| Acked-by: Ingo Molnar <mingo@kernel.org> |
| Cc: gnomes@lxorguk.ukuu.org.uk |
| Cc: Rik van Riel <riel@redhat.com> |
| Cc: Josh Poimboeuf <jpoimboe@redhat.com> |
| Cc: thomas.lendacky@amd.com |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Jiri Kosina <jikos@kernel.org> |
| Cc: Andy Lutomirski <luto@amacapital.net> |
| Cc: Dave Hansen <dave.hansen@intel.com> |
| Cc: Kees Cook <keescook@google.com> |
| Cc: Tim Chen <tim.c.chen@linux.intel.com> |
| Cc: Greg Kroah-Hartman <gregkh@linux-foundation.org> |
| Cc: Paul Turner <pjt@google.com> |
| Link: https://lkml.kernel.org/r/1515707194-20531-12-git-send-email-dwmw@amazon.co.uk |
| Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/x86/kernel/irq_32.c | 9 +++++---- |
| 1 file changed, 5 insertions(+), 4 deletions(-) |
| |
| --- a/arch/x86/kernel/irq_32.c |
| +++ b/arch/x86/kernel/irq_32.c |
| @@ -19,6 +19,7 @@ |
| #include <linux/mm.h> |
| |
| #include <asm/apic.h> |
| +#include <asm/nospec-branch.h> |
| |
| #ifdef CONFIG_DEBUG_STACKOVERFLOW |
| |
| @@ -54,11 +55,11 @@ DEFINE_PER_CPU(struct irq_stack *, softi |
| static void call_on_stack(void *func, void *stack) |
| { |
| asm volatile("xchgl %%ebx,%%esp \n" |
| - "call *%%edi \n" |
| + CALL_NOSPEC |
| "movl %%ebx,%%esp \n" |
| : "=b" (stack) |
| : "0" (stack), |
| - "D"(func) |
| + [thunk_target] "D"(func) |
| : "memory", "cc", "edx", "ecx", "eax"); |
| } |
| |
| @@ -94,11 +95,11 @@ static inline int execute_on_irq_stack(i |
| call_on_stack(print_stack_overflow, isp); |
| |
| asm volatile("xchgl %%ebx,%%esp \n" |
| - "call *%%edi \n" |
| + CALL_NOSPEC |
| "movl %%ebx,%%esp \n" |
| : "=a" (arg1), "=b" (isp) |
| : "0" (desc), "1" (isp), |
| - "D" (desc->handle_irq) |
| + [thunk_target] "D" (desc->handle_irq) |
| : "memory", "cc", "ecx"); |
| return 1; |
| } |