]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
LoongArch: BPF: Fix memory leak in bpf_jit_free()
authorPu Lehui <pulehui@huawei.com>
Fri, 24 Jul 2026 08:33:08 +0000 (16:33 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Fri, 24 Jul 2026 08:33:08 +0000 (16:33 +0800)
When bpf_int_jit_compile() is called for subprograms, it returns early
during the first pass (!prog->is_func || extra_pass is false), keeping
ctx->offset alive for the subsequent extra pass.

If JIT compilation fails for a later subprogram, the BPF core aborts and
calls bpf_jit_free() to clean up the first subprogram. However,
bpf_jit_free() fails to free jit_data->ctx.offset, which causes a memory
leak of the JIT context offsets array.

So fix this by adding the missing kvfree(jit_data->ctx.offset) in
bpf_jit_free().

Reported-by: Sashiko <sashiko-bot@kernel.org>
Fixes: 4ab17e762b34 ("LoongArch: BPF: Use BPF prog pack allocator")
Acked-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Signed-off-by: Pu Lehui <pulehui@huawei.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/net/bpf_jit.c

index c91d474faba73b74d9bb2893cbad1747343b3f31..29c281bef28efbdb8a795c6f79209fd08a86ec09 100644 (file)
@@ -2361,6 +2361,7 @@ void bpf_jit_free(struct bpf_prog *prog)
                 */
                if (jit_data) {
                        bpf_jit_binary_pack_finalize(jit_data->ro_header, jit_data->header);
+                       kvfree(jit_data->ctx.offset);
                        kfree(jit_data);
                }
                hdr = bpf_jit_binary_pack_hdr(prog);