]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
bpf: Fix arg_track_join log to use sa prefix for stack arg slots
authorYonghong Song <yonghong.song@linux.dev>
Fri, 15 May 2026 22:50:56 +0000 (15:50 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Sun, 17 May 2026 00:46:16 +0000 (17:46 -0700)
arg_track_join() logs state transitions at CFG merge points. For
stack arg slots (r >= MAX_BPF_REG), it printed "r11:", "r12:", etc.,
which is misleading since r11 is a special register (BPF_REG_PARAMS)
not meaningful to the user.

Fix it to print "sa0:", "sa1:", etc., matching the per-instruction
transition log in arg_track_log() which already uses the "sa" prefix.

Update the existing stack_arg_pruning_type_mismatch selftest to expect
the corrected format.

Fixes: 2af4e792773f ("bpf: Extend liveness analysis to track stack argument slots")
Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://lore.kernel.org/r/20260515225056.823086-1-yonghong.song@linux.dev
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/liveness.c
tools/testing/selftests/bpf/progs/verifier_stack_arg.c

index 7f4a0e4c2c49d94275e5a8294ebfcb0b7f0818a0..0aadfbae0acc5aa35c236645bbccf8c80b5b63cd 100644 (file)
@@ -806,7 +806,9 @@ static bool arg_track_join(struct bpf_verifier_env *env, int idx, int target, in
                return true;
 
        verbose(env, "arg JOIN insn %d -> %d ", idx, target);
-       if (r >= 0)
+       if (r >= MAX_BPF_REG)
+               verbose(env, "sa%d: ", r - MAX_BPF_REG);
+       else if (r >= 0)
                verbose(env, "r%d: ", r);
        else
                verbose(env, "fp%+d: ", r * 8);
index df0c3438529e808d2248a8cc751a8ff5189d9026..7e0ce5db28a0dd73f192de2a82e6d07e94e2245f 100644 (file)
@@ -117,7 +117,7 @@ __description("stack_arg: pruning with different stack arg types")
 __failure __log_level(2)
 __flag(BPF_F_TEST_STATE_FREQ)
 __msg("arg JOIN insn 9 -> 10 r1: fp0-8 + _ => fp0-8|fp0+0")
-__msg("arg JOIN insn 9 -> 10 r11: fp0-8 + _ => fp0-8|fp0+0")
+__msg("arg JOIN insn 9 -> 10 sa0: fp0-8 + _ => fp0-8|fp0+0")
 __msg("R{{[0-9]}} invalid mem access 'scalar'")
 __naked void stack_arg_pruning_type_mismatch(void)
 {