[PATCH v3 1/2] powerpc64/bpf: fix tail calls for PCREL addressing

Christophe Leroy christophe.leroy at csgroup.eu
Tue Apr 2 22:35:58 AEDT 2024



Le 02/04/2024 à 12:58, Hari Bathini a écrit :
> 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
> 
> Fixes: 7e3a68be42e1 ("powerpc/64: vmlinux support building with PCREL addresing")
> Cc: stable at vger.kernel.org
> Signed-off-by: Hari Bathini <hbathini at linux.ibm.com>
> ---
> 
> * Changes in v3:
>    - New patch to fix tailcall issues with PCREL addressing.
> 
> 
>   arch/powerpc/net/bpf_jit_comp64.c | 2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/arch/powerpc/net/bpf_jit_comp64.c b/arch/powerpc/net/bpf_jit_comp64.c
> index 79f23974a320..7f62ac4b4e65 100644
> --- a/arch/powerpc/net/bpf_jit_comp64.c
> +++ b/arch/powerpc/net/bpf_jit_comp64.c
> @@ -285,8 +285,10 @@ static int bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32 o
>   	int b2p_index = bpf_to_ppc(BPF_REG_3);
>   	int bpf_tailcall_prologue_size = 8;
>   
> +#ifndef CONFIG_PPC_KERNEL_PCREL

Any reason for not using IS_ENABLED(CONFIG_PPC_KERNEL_PCREL) ?

>   	if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V2))
>   		bpf_tailcall_prologue_size += 4; /* skip past the toc load */
> +#endif
>   
>   	/*
>   	 * if (index >= array->map.max_entries)


More information about the Linuxppc-dev mailing list