| From foo@baz Tue Jul 12 05:03:58 PM CEST 2022 |
| From: Peter Zijlstra <peterz@infradead.org> |
| Date: Tue, 14 Jun 2022 23:15:34 +0200 |
| Subject: x86/retpoline: Cleanup some #ifdefery |
| |
| From: Peter Zijlstra <peterz@infradead.org> |
| |
| commit 369ae6ffc41a3c1137cab697635a84d0cc7cdcea upstream. |
| |
| On it's own not much of a cleanup but it prepares for more/similar |
| code. |
| |
| Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> |
| Signed-off-by: Borislav Petkov <bp@suse.de> |
| Reviewed-by: Borislav Petkov <bp@suse.de> |
| Reviewed-by: Josh Poimboeuf <jpoimboe@kernel.org> |
| Signed-off-by: Borislav Petkov <bp@suse.de> |
| Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/x86/include/asm/disabled-features.h | 9 ++++++++- |
| arch/x86/include/asm/nospec-branch.h | 7 +++---- |
| arch/x86/net/bpf_jit_comp.c | 7 +++---- |
| 3 files changed, 14 insertions(+), 9 deletions(-) |
| |
| --- a/arch/x86/include/asm/disabled-features.h |
| +++ b/arch/x86/include/asm/disabled-features.h |
| @@ -56,6 +56,13 @@ |
| # define DISABLE_PTI (1 << (X86_FEATURE_PTI & 31)) |
| #endif |
| |
| +#ifdef CONFIG_RETPOLINE |
| +# define DISABLE_RETPOLINE 0 |
| +#else |
| +# define DISABLE_RETPOLINE ((1 << (X86_FEATURE_RETPOLINE & 31)) | \ |
| + (1 << (X86_FEATURE_RETPOLINE_LFENCE & 31))) |
| +#endif |
| + |
| #ifdef CONFIG_INTEL_IOMMU_SVM |
| # define DISABLE_ENQCMD 0 |
| #else |
| @@ -82,7 +89,7 @@ |
| #define DISABLED_MASK8 0 |
| #define DISABLED_MASK9 (DISABLE_SMAP|DISABLE_SGX) |
| #define DISABLED_MASK10 0 |
| -#define DISABLED_MASK11 0 |
| +#define DISABLED_MASK11 (DISABLE_RETPOLINE) |
| #define DISABLED_MASK12 0 |
| #define DISABLED_MASK13 0 |
| #define DISABLED_MASK14 0 |
| --- a/arch/x86/include/asm/nospec-branch.h |
| +++ b/arch/x86/include/asm/nospec-branch.h |
| @@ -120,17 +120,16 @@ |
| _ASM_PTR " 999b\n\t" \ |
| ".popsection\n\t" |
| |
| -#ifdef CONFIG_RETPOLINE |
| - |
| typedef u8 retpoline_thunk_t[RETPOLINE_THUNK_SIZE]; |
| +extern retpoline_thunk_t __x86_indirect_thunk_array[]; |
| + |
| +#ifdef CONFIG_RETPOLINE |
| |
| #define GEN(reg) \ |
| extern retpoline_thunk_t __x86_indirect_thunk_ ## reg; |
| #include <asm/GEN-for-each-reg.h> |
| #undef GEN |
| |
| -extern retpoline_thunk_t __x86_indirect_thunk_array[]; |
| - |
| #ifdef CONFIG_X86_64 |
| |
| /* |
| --- a/arch/x86/net/bpf_jit_comp.c |
| +++ b/arch/x86/net/bpf_jit_comp.c |
| @@ -407,16 +407,15 @@ static void emit_indirect_jump(u8 **ppro |
| { |
| u8 *prog = *pprog; |
| |
| -#ifdef CONFIG_RETPOLINE |
| if (cpu_feature_enabled(X86_FEATURE_RETPOLINE_LFENCE)) { |
| EMIT_LFENCE(); |
| EMIT2(0xFF, 0xE0 + reg); |
| } else if (cpu_feature_enabled(X86_FEATURE_RETPOLINE)) { |
| OPTIMIZER_HIDE_VAR(reg); |
| emit_jump(&prog, &__x86_indirect_thunk_array[reg], ip); |
| - } else |
| -#endif |
| - EMIT2(0xFF, 0xE0 + reg); |
| + } else { |
| + EMIT2(0xFF, 0xE0 + reg); |
| + } |
| |
| *pprog = prog; |
| } |