Skip to content

Commit b16904f

Browse files
Yonghong Songborkmann
Yonghong Song
authored andcommitted
bpf: Fix a few selftest failures due to llvm18 change
With latest upstream llvm18, the following test cases failed: $ ./test_progs -j #13/2 bpf_cookie/multi_kprobe_link_api:FAIL #13/3 bpf_cookie/multi_kprobe_attach_api:FAIL #13 bpf_cookie:FAIL #77 fentry_fexit:FAIL #78/1 fentry_test/fentry:FAIL #78 fentry_test:FAIL #82/1 fexit_test/fexit:FAIL #82 fexit_test:FAIL #112/1 kprobe_multi_test/skel_api:FAIL #112/2 kprobe_multi_test/link_api_addrs:FAIL [...] #112 kprobe_multi_test:FAIL #356/17 test_global_funcs/global_func17:FAIL #356 test_global_funcs:FAIL Further analysis shows llvm upstream patch [1] is responsible for the above failures. For example, for function bpf_fentry_test7() in net/bpf/test_run.c, without [1], the asm code is: 0000000000000400 <bpf_fentry_test7>: 400: f3 0f 1e fa endbr64 404: e8 00 00 00 00 callq 0x409 <bpf_fentry_test7+0x9> 409: 48 89 f8 movq %rdi, %rax 40c: c3 retq 40d: 0f 1f 00 nopl (%rax) ... and with [1], the asm code is: 0000000000005d20 <bpf_fentry_test7.specialized.1>: 5d20: e8 00 00 00 00 callq 0x5d25 <bpf_fentry_test7.specialized.1+0x5> 5d25: c3 retq ... and <bpf_fentry_test7.specialized.1> is called instead of <bpf_fentry_test7> and this caused test failures for #13/#77 etc. except #356. For test case #356/17, with [1] (progs/test_global_func17.c)), the main prog looks like: 0000000000000000 <global_func17>: 0: b4 00 00 00 2a 00 00 00 w0 = 0x2a 1: 95 00 00 00 00 00 00 00 exit ... which passed verification while the test itself expects a verification failure. Let us add 'barrier_var' style asm code in both places to prevent function specialization which caused selftests failure. [1] llvm/llvm-project#72903 Signed-off-by: Yonghong Song <yonghong.song@linux.dev> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Link: https://lore.kernel.org/bpf/20231127050342.1945270-1-yonghong.song@linux.dev
1 parent e8a339b commit b16904f

File tree

2 files changed

+2
-1
lines changed

2 files changed

+2
-1
lines changed

net/bpf/test_run.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,7 @@ struct bpf_fentry_test_t {
542542

543543
int noinline bpf_fentry_test7(struct bpf_fentry_test_t *arg)
544544
{
545-
asm volatile ("");
545+
asm volatile ("": "+r"(arg));
546546
return (long)arg;
547547
}
548548

tools/testing/selftests/bpf/progs/test_global_func17.c

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
__noinline int foo(int *p)
77
{
8+
barrier_var(p);
89
return p ? (*p = 42) : 0;
910
}
1011

0 commit comments

Comments
 (0)