]> www.infradead.org Git - users/jedix/linux-maple.git/commit
selftests/bpf: Add some tests related to 'may_goto 0' insns
authorYonghong Song <yonghong.song@linux.dev>
Sat, 18 Jan 2025 19:20:34 +0000 (11:20 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Mon, 20 Jan 2025 17:47:14 +0000 (09:47 -0800)
commit14a627fe794a10cf507861e63cf9d46077699337
tree9b3a227d026d6b2eb96fe789b792099353f03310
parent0c35ca252a7dea61f0731e99d695492176862e2c
selftests/bpf: Add some tests related to 'may_goto 0' insns

Add both asm-based and C-based tests which have 'may_goto 0' insns.

For the following code in C-based test,
   int i, tmp[3];
   for (i = 0; i < 3 && can_loop; i++)
       tmp[i] = 0;

The clang compiler (clang 19 and 20) generates
   may_goto 2
   may_goto 1
   may_goto 0
   r1 = 0
   r2 = 0
   r3 = 0

The above asm codes are due to llvm pass SROAPass. This ensures the
successful verification since tmp[0-2] are initialized.  Otherwise,
the code without SROAPass like
   may_goto 5
   r1 = 0
   may_goto 3
   r2 = 0
   may_goto 1
   r3 = 0
will have verification failure.

Although from the source code C-based test should have verification
failure, clang compiler optimization generates code with successful
verification. If gcc generates different asm codes than clang, the
following code can be used for gcc:
   int i, tmp[3];
   for (i = 0; i < 3; i++)
       tmp[i] = 0;

Acked-by: Eduard Zingerman <eddyz87@gmail.com>
Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://lore.kernel.org/r/20250118192034.2124952-1-yonghong.song@linux.dev
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/prog_tests/verifier.c
tools/testing/selftests/bpf/progs/verifier_may_goto_1.c [new file with mode: 0644]
tools/testing/selftests/bpf/progs/verifier_may_goto_2.c [new file with mode: 0644]