]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
bpf: move REG_LIVE_DONE check to clean_live_states()
authorEduard Zingerman <eddyz87@gmail.com>
Wed, 11 Jun 2025 20:08:32 +0000 (13:08 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 12 Jun 2025 23:52:43 +0000 (16:52 -0700)
The next patch would add some relatively heavy-weight operation to
clean_live_states(), this operation can be skipped if REG_LIVE_DONE
is set. Move the check from clean_verifier_state() to
clean_verifier_state() as a small refactoring commit.

Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20250611200836.4135542-7-eddyz87@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/verifier.c

index e49bdce050491b22534bb084e111b6e367d936cc..90b3d1a0bd86c49351e6c2cc88d85998c27dc93c 100644 (file)
@@ -18305,10 +18305,6 @@ static void clean_verifier_state(struct bpf_verifier_env *env,
 {
        int i;
 
-       if (st->frame[0]->regs[0].live & REG_LIVE_DONE)
-               /* all regs in this state in all frames were already marked */
-               return;
-
        for (i = 0; i <= st->curframe; i++)
                clean_func_state(env, st->frame[i]);
 }
@@ -18363,6 +18359,9 @@ static void clean_live_states(struct bpf_verifier_env *env, int insn,
                if (sl->state.insn_idx != insn ||
                    !same_callsites(&sl->state, cur))
                        continue;
+               if (sl->state.frame[0]->regs[0].live & REG_LIVE_DONE)
+                       /* all regs in this state in all frames were already marked */
+                       continue;
                clean_verifier_state(env, &sl->state);
        }
 }