• Hari Bathini's avatar
    powerpc/64/bpf: fix tail calls for PCREL addressing · 2ecfe59c
    Hari Bathini authored
    With PCREL addressing, there is no kernel TOC. So, it is not setup in
    prologue when PCREL addressing is used. But the number of instructions
    to skip on a tail call was not adjusted accordingly. That resulted in
    not so obvious failures while using tailcalls. 'tailcalls' selftest
    crashed the system with the below call trace:
    
      bpf_test_run+0xe8/0x3cc (unreliable)
      bpf_prog_test_run_skb+0x348/0x778
      __sys_bpf+0xb04/0x2b00
      sys_bpf+0x28/0x38
      system_call_exception+0x168/0x340
      system_call_vectored_common+0x15c/0x2ec
    
    Also, as bpf programs are always module addresses and a bpf helper in
    general is a core kernel text address, using PC relative addressing
    often fails with "out of range of pcrel address" error. Switch to
    using kernel base for relative addressing to handle this better.
    
    Fixes: 7e3a68be
    
     ("powerpc/64: vmlinux support building with PCREL addresing")
    Cc: stable@vger.kernel.org # v6.4+
    Signed-off-by: default avatarHari Bathini <hbathini@linux.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20240502173205.142794-1-hbathini@linux.ibm.com
    2ecfe59c
bpf_jit_comp64.c 36.3 KB