]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bpf: Fix insn_aux_data leak on verifier err_free_env path
authorKaFai Wan <kafai.wan@linux.dev>
Wed, 24 Jun 2026 12:35:35 +0000 (20:35 +0800)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 26 Jun 2026 01:23:56 +0000 (18:23 -0700)
When bpf_check() allocates env->insn_aux_data successfully but later
fails to allocate env->succ, it jumps directly to err_free_env.

The existing vfree(env->insn_aux_data) sits before the err_free_env
label, so that direct jump bypasses it and leaks insn_aux_data.

Move vfree(env->insn_aux_data) into err_free_env so all early and late
exit paths release it consistently.

Fixes: 2f69c5685427 ("bpf: make bpf_insn_successors to return a pointer")
Signed-off-by: KaFai Wan <kafai.wan@linux.dev>
Reviewed-by: Anton Protopopov <a.s.protopopov@gmail.com>
Link: https://lore.kernel.org/r/20260624123536.114757-1-kafai.wan@linux.dev
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/verifier.c

index 3cdc2e90f643eac57d2ab0e6314f2cbef6fee056..6515d4d3c0032f174a166cd694a49f4f89c52d65 100644 (file)
@@ -20006,13 +20006,13 @@ err_unlock:
        if (!is_priv)
                mutex_unlock(&bpf_verifier_lock);
        bpf_clear_insn_aux_data(env, 0, env->prog->len);
-       vfree(env->insn_aux_data);
 err_free_env:
        bpf_stack_liveness_free(env);
        kvfree(env->cfg.insn_postorder);
        kvfree(env->scc_info);
        kvfree(env->succ);
        kvfree(env->gotox_tmp_buf);
+       vfree(env->insn_aux_data);
        kvfree(env);
        return ret;
 }