Re: [PATCH bpf-next v7 2/6] bpf: Attribute async callback instructions to verification roots
Eduard Zingerman <[email protected]>
| Newsgroups | org.kernel.vger.bpf |
|---|---|
| Message-ID | <[email protected]> |
On Sat, 2026-08-08 at 08:25 +0200, Kumar Kartikeya Dwivedi wrote:
...
> diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
> index 855f245e7468..9b76851dcf54 100644
> --- a/kernel/bpf/verifier.c
> +++ b/kernel/bpf/verifier.c
> @@ -18762,6 +18762,7 @@ static int do_check_subprogs(struct bpf_verifier_env *env)
> struct bpf_prog_aux *aux = env->prog->aux;
> struct bpf_func_info_aux *sub_aux;
> int i, ret, new_cnt;
> + u32 insn_processed;
>
> if (!aux->func_info)
> return 0;
> @@ -18780,9 +18781,11 @@ static int do_check_subprogs(struct bpf_verifier_env *env)
> if (!sub_aux->called || sub_aux->verified)
> continue;
>
> + insn_processed = env->insn_processed;
> env->insn_idx = env->subprog_info[i].start;
> WARN_ON_ONCE(env->insn_idx == 0);
> ret = do_check_common(env, i);
> + env->subprog_info[i].insns_total = env->insn_processed - insn_processed;
> if (ret) {
> return ret;
> } else if (env->log.level & BPF_LOG_LEVEL) {
> @@ -18809,10 +18812,12 @@ static int do_check_subprogs(struct bpf_verifier_env *env)
>
> static int do_check_main(struct bpf_verifier_env *env)
> {
> + u32 insn_processed = env->insn_processed;
> int ret;
>
> env->insn_idx = 0;
> ret = do_check_common(env, 0);
> + env->subprog_info[0].insns_total = env->insn_processed - insn_processed;
Let's move this accounting inside do_check_common().
Also, having a comment like:
/*
* The override is needed to account for async subprograms,
* which are verified with their own set of stack frames and
* thus are not accounted as callees by account_current_path().
* Accumulate their total counts as total counts of the main
* or global subprog hosting the async call.
*/
would be helpful.
> if (!ret)
> env->prog->aux->stack_depth = env->subprog_info[0].stack_depth;
> return ret;