Skip to content

Commit 6cd21eb

Browse files
eddyz87Alexei Starovoitov
authored andcommitted
bpf: use compute_live_registers() info in clean_func_state
Prepare for bpf_reg_state->live field removal by leveraging insn_aux_data->live_regs_before instead of bpf_reg_state->live in compute_live_registers(). This is similar to logic in func_states_equal(). No changes in verification performance for selftests or sched_ext. Signed-off-by: Eduard Zingerman <eddyz87@gmail.com> Link: https://lore.kernel.org/r/20250918-callchain-sensitive-liveness-v3-2-c3cd27bacc60@gmail.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
1 parent daf4c29 commit 6cd21eb

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

kernel/bpf/verifier.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18489,15 +18489,16 @@ static bool check_scalar_ids(u32 old_id, u32 cur_id, struct bpf_idmap *idmap)
1848918489
}
1849018490

1849118491
static void clean_func_state(struct bpf_verifier_env *env,
18492-
struct bpf_func_state *st)
18492+
struct bpf_func_state *st,
18493+
u32 ip)
1849318494
{
18495+
u16 live_regs = env->insn_aux_data[ip].live_regs_before;
1849418496
enum bpf_reg_liveness live;
1849518497
int i, j;
1849618498

1849718499
for (i = 0; i < BPF_REG_FP; i++) {
18498-
live = st->regs[i].live;
1849918500
/* liveness must not touch this register anymore */
18500-
if (!(live & REG_LIVE_READ))
18501+
if (!(live_regs & BIT(i)))
1850118502
/* since the register is unused, clear its state
1850218503
* to make further comparison simpler
1850318504
*/
@@ -18518,11 +18519,13 @@ static void clean_func_state(struct bpf_verifier_env *env,
1851818519
static void clean_verifier_state(struct bpf_verifier_env *env,
1851918520
struct bpf_verifier_state *st)
1852018521
{
18521-
int i;
18522+
int i, ip;
1852218523

1852318524
st->cleaned = true;
18524-
for (i = 0; i <= st->curframe; i++)
18525-
clean_func_state(env, st->frame[i]);
18525+
for (i = 0; i <= st->curframe; i++) {
18526+
ip = frame_insn_idx(st, i);
18527+
clean_func_state(env, st->frame[i], ip);
18528+
}
1852618529
}
1852718530

1852818531
/* the parentage chains form a tree.

0 commit comments

Comments
 (0)