lkml.org 
[lkml]   [2021]   [Oct]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 9/9] bpf,x86: Respect X86_FEATURE_RETPOLINE*
    On Wed, Oct 13, 2021 at 02:22:26PM +0200, Peter Zijlstra wrote:
    > Current BPF codegen doesn't respect X86_FEATURE_RETPOLINE* flags and
    > unconditionally emits a thunk call, this is sub-optimal and doesn't
    > match the regular, compiler generated, code.
    >
    > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    > ---
    > arch/x86/net/bpf_jit_comp.c | 18 +++++++++++-------
    > 1 file changed, 11 insertions(+), 7 deletions(-)
    >
    > --- a/arch/x86/net/bpf_jit_comp.c
    > +++ b/arch/x86/net/bpf_jit_comp.c
    > @@ -2123,14 +2123,18 @@ static int emit_fallback_jump(u8 **pprog
    > int err = 0;
    >
    > #ifdef CONFIG_RETPOLINE
    > - /* Note that this assumes the the compiler uses external
    > - * thunks for indirect calls. Both clang and GCC use the same
    > - * naming convention for external thunks.
    > - */
    > - err = emit_jump(&prog, __x86_indirect_thunk_rdx, prog);
    > -#else
    > - EMIT2(0xFF, 0xE2); /* jmp rdx */
    > + if (cpu_feature_enabled(X86_FEATURE_RETPOLINE)) {
    > + if (cpu_feature_enabled(X86_FEATURE_RETPOLINE_AMD)) {
    > + /* The AMD retpoline can be easily emitted inline. */
    > + EMIT3(0x0F, 0xAE, 0xE8); /* lfence */
    > + EMIT2(0xFF, 0xE2); /* jmp rdx */
    > + } else {
    > + /* Call the retpoline thunk */
    > + err = emit_jump(&prog, __x86_indirect_thunk_rdx, prog);
    > + }
    > + } else
    > #endif
    > + EMIT2(0xFF, 0xE2); /* jmp rdx */

    But the rest of eBPF JIT just emits retpolines unconditionally
    regardless of feature, for example see RETPOLINE_RCX_BPF_JIT(). So I'm
    thinking this should probably be consistent with that (or that with
    this).

    --
    Josh

    \
     
     \ /
      Last update: 2021-10-13 23:06    [W:2.612 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site