]> 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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 8 Jan 2026 09:17:13 +0000 (10:17 +0100)
commit d314e1f48260cef3f869e3edc02a02c8a48b08e1 upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/loongarch/net/bpf_jit.c

index 4be8515197ce04d5010ce5d8fbabcf15e0b8f4f7..1d09c0d8082e16a922c593786fdac6dbf771d8fe 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);