| From foo@baz Wed Mar 9 04:10:24 PM CET 2022 |
| From: Zhenzhong Duan <zhenzhong.duan@oracle.com> |
| Date: Tue, 18 Sep 2018 07:45:00 -0700 |
| Subject: x86/speculation: Add RETPOLINE_AMD support to the inline asm CALL_NOSPEC variant |
| |
| From: Zhenzhong Duan <zhenzhong.duan@oracle.com> |
| |
| commit 0cbb76d6285794f30953bfa3ab831714b59dd700 upstream. |
| |
| ..so that they match their asm counterpart. |
| |
| Add the missing ANNOTATE_NOSPEC_ALTERNATIVE in CALL_NOSPEC, while at it. |
| |
| Signed-off-by: Zhenzhong Duan <zhenzhong.duan@oracle.com> |
| Signed-off-by: Borislav Petkov <bp@suse.de> |
| Cc: Daniel Borkmann <daniel@iogearbox.net> |
| Cc: David Woodhouse <dwmw@amazon.co.uk> |
| Cc: H. Peter Anvin <hpa@zytor.com> |
| Cc: Ingo Molnar <mingo@redhat.com> |
| Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Wang YanQing <udknight@gmail.com> |
| Cc: dhaval.giani@oracle.com |
| Cc: srinivas.eeda@oracle.com |
| Link: http://lkml.kernel.org/r/c3975665-173e-4d70-8dee-06c926ac26ee@default |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/x86/include/asm/nospec-branch.h | 17 +++++++++++++---- |
| 1 file changed, 13 insertions(+), 4 deletions(-) |
| |
| --- a/arch/x86/include/asm/nospec-branch.h |
| +++ b/arch/x86/include/asm/nospec-branch.h |
| @@ -172,11 +172,15 @@ |
| */ |
| # define CALL_NOSPEC \ |
| ANNOTATE_NOSPEC_ALTERNATIVE \ |
| - ALTERNATIVE( \ |
| + ALTERNATIVE_2( \ |
| ANNOTATE_RETPOLINE_SAFE \ |
| "call *%[thunk_target]\n", \ |
| "call __x86_indirect_thunk_%V[thunk_target]\n", \ |
| - X86_FEATURE_RETPOLINE) |
| + X86_FEATURE_RETPOLINE, \ |
| + "lfence;\n" \ |
| + ANNOTATE_RETPOLINE_SAFE \ |
| + "call *%[thunk_target]\n", \ |
| + X86_FEATURE_RETPOLINE_AMD) |
| # define THUNK_TARGET(addr) [thunk_target] "r" (addr) |
| |
| #elif defined(CONFIG_X86_32) && defined(CONFIG_RETPOLINE) |
| @@ -186,7 +190,8 @@ |
| * here, anyway. |
| */ |
| # define CALL_NOSPEC \ |
| - ALTERNATIVE( \ |
| + ANNOTATE_NOSPEC_ALTERNATIVE \ |
| + ALTERNATIVE_2( \ |
| ANNOTATE_RETPOLINE_SAFE \ |
| "call *%[thunk_target]\n", \ |
| " jmp 904f;\n" \ |
| @@ -201,7 +206,11 @@ |
| " ret;\n" \ |
| " .align 16\n" \ |
| "904: call 901b;\n", \ |
| - X86_FEATURE_RETPOLINE) |
| + X86_FEATURE_RETPOLINE, \ |
| + "lfence;\n" \ |
| + ANNOTATE_RETPOLINE_SAFE \ |
| + "call *%[thunk_target]\n", \ |
| + X86_FEATURE_RETPOLINE_AMD) |
| |
| # define THUNK_TARGET(addr) [thunk_target] "rm" (addr) |
| #else /* No retpoline for C / inline asm */ |