]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
LoongArch: BPF: Save return address register ra to t0 before trampoline
authorChenghao Duan <duanchenghao@kylinos.cn>
Wed, 31 Dec 2025 07:19:20 +0000 (15:19 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Wed, 31 Dec 2025 07:19:20 +0000 (15:19 +0800)
Modify the build_prologue() function to ensure the return address
register ra is saved to t0 before entering trampoline operations.
This change ensures the accurate return address handling when a BPF
program calls another BPF program, preventing errors in the BPF-to-BPF
call chain.

Cc: stable@vger.kernel.org
Fixes: 677e6123e3d2 ("LoongArch: BPF: Disable trampoline for kernel module function trace")
Signed-off-by: Chenghao Duan <duanchenghao@kylinos.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/net/bpf_jit.c

index 766ded335fd8bfcfbeedf5ad49955cbaa1b37a95..9729c0ff7bfcc7b2e79c2504b5664364a617187d 100644 (file)
@@ -139,6 +139,7 @@ static void build_prologue(struct jit_ctx *ctx)
        stack_adjust = round_up(stack_adjust, 16);
        stack_adjust += bpf_stack_adjust;
 
+       move_reg(ctx, LOONGARCH_GPR_T0, LOONGARCH_GPR_RA);
        /* Reserve space for the move_imm + jirl instruction */
        for (i = 0; i < LOONGARCH_LONG_JUMP_NINSNS; i++)
                emit_insn(ctx, nop);