Skip to content

Commit 0b50478

Browse files
seehearfeelanakryiko
authored andcommitted
selftests/bpf: Skip callback tests if jit is disabled in test_verifier
If CONFIG_BPF_JIT_ALWAYS_ON is not set and bpf_jit_enable is 0, there exist 6 failed tests. [root@linux bpf]# echo 0 > /proc/sys/net/core/bpf_jit_enable [root@linux bpf]# echo 0 > /proc/sys/kernel/unprivileged_bpf_disabled [root@linux bpf]# ./test_verifier | grep FAIL torvalds#106/p inline simple bpf_loop call FAIL torvalds#107/p don't inline bpf_loop call, flags non-zero FAIL torvalds#108/p don't inline bpf_loop call, callback non-constant FAIL torvalds#109/p bpf_loop_inline and a dead func FAIL torvalds#110/p bpf_loop_inline stack locations for loop vars FAIL torvalds#111/p inline bpf_loop call in a big program FAIL Summary: 768 PASSED, 15 SKIPPED, 6 FAILED The test log shows that callbacks are not allowed in non-JITed programs, interpreter doesn't support them yet, thus these tests should be skipped if jit is disabled. Add an explicit flag F_NEEDS_JIT_ENABLED to those tests to mark that they require JIT enabled in bpf_loop_inline.c, check the flag and jit_disabled at the beginning of do_test_single() to handle this case. With this patch: [root@linux bpf]# echo 0 > /proc/sys/net/core/bpf_jit_enable [root@linux bpf]# echo 0 > /proc/sys/kernel/unprivileged_bpf_disabled [root@linux bpf]# ./test_verifier | grep FAIL Summary: 768 PASSED, 21 SKIPPED, 0 FAILED Suggested-by: Andrii Nakryiko <andrii@kernel.org> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/bpf/20240123090351.2207-3-yangtiezhu@loongson.cn
1 parent 15b4f88 commit 0b50478

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

tools/testing/selftests/bpf/test_verifier.c

+11
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,15 @@
6767

6868
#define F_NEEDS_EFFICIENT_UNALIGNED_ACCESS (1 << 0)
6969
#define F_LOAD_WITH_STRICT_ALIGNMENT (1 << 1)
70+
#define F_NEEDS_JIT_ENABLED (1 << 2)
7071

7172
/* need CAP_BPF, CAP_NET_ADMIN, CAP_PERFMON to load progs */
7273
#define ADMIN_CAPS (1ULL << CAP_NET_ADMIN | \
7374
1ULL << CAP_PERFMON | \
7475
1ULL << CAP_BPF)
7576
#define UNPRIV_SYSCTL "kernel/unprivileged_bpf_disabled"
7677
static bool unpriv_disabled = false;
78+
static bool jit_disabled;
7779
static int skips;
7880
static bool verbose = false;
7981
static int verif_log_level = 0;
@@ -1524,6 +1526,13 @@ static void do_test_single(struct bpf_test *test, bool unpriv,
15241526
__u32 pflags;
15251527
int i, err;
15261528

1529+
if ((test->flags & F_NEEDS_JIT_ENABLED) && jit_disabled) {
1530+
printf("SKIP (requires BPF JIT)");
1531+
skips++;
1532+
sched_yield();
1533+
return;
1534+
}
1535+
15271536
fd_prog = -1;
15281537
for (i = 0; i < MAX_NR_MAPS; i++)
15291538
map_fds[i] = -1;
@@ -1844,6 +1853,8 @@ int main(int argc, char **argv)
18441853
return EXIT_FAILURE;
18451854
}
18461855

1856+
jit_disabled = !is_jit_enabled();
1857+
18471858
/* Use libbpf 1.0 API mode */
18481859
libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
18491860

tools/testing/selftests/bpf/verifier/bpf_loop_inline.c

+6
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
.expected_insns = { PSEUDO_CALL_INSN() },
5858
.unexpected_insns = { HELPER_CALL_INSN() },
5959
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
60+
.flags = F_NEEDS_JIT_ENABLED,
6061
.result = ACCEPT,
6162
.runs = 0,
6263
.func_info = { { 0, MAIN_TYPE }, { 12, CALLBACK_TYPE } },
@@ -90,6 +91,7 @@
9091
.expected_insns = { HELPER_CALL_INSN() },
9192
.unexpected_insns = { PSEUDO_CALL_INSN() },
9293
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
94+
.flags = F_NEEDS_JIT_ENABLED,
9395
.result = ACCEPT,
9496
.runs = 0,
9597
.func_info = { { 0, MAIN_TYPE }, { 16, CALLBACK_TYPE } },
@@ -127,6 +129,7 @@
127129
.expected_insns = { HELPER_CALL_INSN() },
128130
.unexpected_insns = { PSEUDO_CALL_INSN() },
129131
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
132+
.flags = F_NEEDS_JIT_ENABLED,
130133
.result = ACCEPT,
131134
.runs = 0,
132135
.func_info = {
@@ -165,6 +168,7 @@
165168
.expected_insns = { PSEUDO_CALL_INSN() },
166169
.unexpected_insns = { HELPER_CALL_INSN() },
167170
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
171+
.flags = F_NEEDS_JIT_ENABLED,
168172
.result = ACCEPT,
169173
.runs = 0,
170174
.func_info = {
@@ -235,6 +239,7 @@
235239
},
236240
.unexpected_insns = { HELPER_CALL_INSN() },
237241
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
242+
.flags = F_NEEDS_JIT_ENABLED,
238243
.result = ACCEPT,
239244
.func_info = {
240245
{ 0, MAIN_TYPE },
@@ -252,6 +257,7 @@
252257
.unexpected_insns = { HELPER_CALL_INSN() },
253258
.result = ACCEPT,
254259
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
260+
.flags = F_NEEDS_JIT_ENABLED,
255261
.func_info = { { 0, MAIN_TYPE }, { 16, CALLBACK_TYPE } },
256262
.func_info_cnt = 2,
257263
BTF_TYPES

0 commit comments

Comments
 (0)