Skip to content

Commit 0d7fefe

Browse files
anakryikoAlexei Starovoitov
authored and
Alexei Starovoitov
committed
selftests/bpf: Use non-autoloaded programs in few tests
Take advantage of new libbpf feature for declarative non-autoloaded BPF program SEC() definitions in few test that test single program at a time out of many available programs within the single BPF object. Signed-off-by: Andrii Nakryiko <[email protected]> Signed-off-by: Alexei Starovoitov <[email protected]> Link: https://lore.kernel.org/bpf/[email protected]
1 parent a3820c4 commit 0d7fefe

File tree

6 files changed

+35
-65
lines changed

6 files changed

+35
-65
lines changed

tools/testing/selftests/bpf/prog_tests/helper_restricted.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@
66
void test_helper_restricted(void)
77
{
88
int prog_i = 0, prog_cnt;
9-
int duration = 0;
109

1110
do {
1211
struct test_helper_restricted *test;
13-
int maybeOK;
12+
int err;
1413

1514
test = test_helper_restricted__open();
1615
if (!ASSERT_OK_PTR(test, "open"))
@@ -21,12 +20,11 @@ void test_helper_restricted(void)
2120
for (int j = 0; j < prog_cnt; ++j) {
2221
struct bpf_program *prog = *test->skeleton->progs[j].prog;
2322

24-
maybeOK = bpf_program__set_autoload(prog, prog_i == j);
25-
ASSERT_OK(maybeOK, "set autoload");
23+
bpf_program__set_autoload(prog, true);
2624
}
2725

28-
maybeOK = test_helper_restricted__load(test);
29-
CHECK(!maybeOK, test->skeleton->progs[prog_i].name, "helper isn't restricted");
26+
err = test_helper_restricted__load(test);
27+
ASSERT_ERR(err, "load_should_fail");
3028

3129
test_helper_restricted__destroy(test);
3230
} while (++prog_i < prog_cnt);

tools/testing/selftests/bpf/prog_tests/reference_tracking.c

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,6 @@
11
// SPDX-License-Identifier: GPL-2.0
22
#include <test_progs.h>
33

4-
static void toggle_object_autoload_progs(const struct bpf_object *obj,
5-
const char *name_load)
6-
{
7-
struct bpf_program *prog;
8-
9-
bpf_object__for_each_program(prog, obj) {
10-
const char *name = bpf_program__name(prog);
11-
12-
if (!strcmp(name_load, name))
13-
bpf_program__set_autoload(prog, true);
14-
else
15-
bpf_program__set_autoload(prog, false);
16-
}
17-
}
18-
194
void test_reference_tracking(void)
205
{
216
const char *file = "test_sk_lookup_kern.o";
@@ -39,6 +24,7 @@ void test_reference_tracking(void)
3924
goto cleanup;
4025

4126
bpf_object__for_each_program(prog, obj_iter) {
27+
struct bpf_program *p;
4228
const char *name;
4329

4430
name = bpf_program__name(prog);
@@ -49,7 +35,12 @@ void test_reference_tracking(void)
4935
if (!ASSERT_OK_PTR(obj, "obj_open_file"))
5036
goto cleanup;
5137

52-
toggle_object_autoload_progs(obj, name);
38+
/* all programs are not loaded by default, so just set
39+
* autoload to true for the single prog under test
40+
*/
41+
p = bpf_object__find_program_by_name(obj, name);
42+
bpf_program__set_autoload(p, true);
43+
5344
/* Expect verifier failure if test name has 'err' */
5445
if (strncmp(name, "err_", sizeof("err_") - 1) == 0) {
5546
libbpf_print_fn_t old_print_fn;

tools/testing/selftests/bpf/prog_tests/test_strncmp.c

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,12 @@ static void strncmp_full_str_cmp(struct strncmp_test *skel, const char *name,
4444
static void test_strncmp_ret(void)
4545
{
4646
struct strncmp_test *skel;
47-
struct bpf_program *prog;
4847
int err, got;
4948

5049
skel = strncmp_test__open();
5150
if (!ASSERT_OK_PTR(skel, "strncmp_test open"))
5251
return;
5352

54-
bpf_object__for_each_program(prog, skel->obj)
55-
bpf_program__set_autoload(prog, false);
56-
5753
bpf_program__set_autoload(skel->progs.do_strncmp, true);
5854

5955
err = strncmp_test__load(skel);
@@ -91,18 +87,13 @@ static void test_strncmp_ret(void)
9187
static void test_strncmp_bad_not_const_str_size(void)
9288
{
9389
struct strncmp_test *skel;
94-
struct bpf_program *prog;
9590
int err;
9691

9792
skel = strncmp_test__open();
9893
if (!ASSERT_OK_PTR(skel, "strncmp_test open"))
9994
return;
10095

101-
bpf_object__for_each_program(prog, skel->obj)
102-
bpf_program__set_autoload(prog, false);
103-
104-
bpf_program__set_autoload(skel->progs.strncmp_bad_not_const_str_size,
105-
true);
96+
bpf_program__set_autoload(skel->progs.strncmp_bad_not_const_str_size, true);
10697

10798
err = strncmp_test__load(skel);
10899
ASSERT_ERR(err, "strncmp_test load bad_not_const_str_size");
@@ -113,18 +104,13 @@ static void test_strncmp_bad_not_const_str_size(void)
113104
static void test_strncmp_bad_writable_target(void)
114105
{
115106
struct strncmp_test *skel;
116-
struct bpf_program *prog;
117107
int err;
118108

119109
skel = strncmp_test__open();
120110
if (!ASSERT_OK_PTR(skel, "strncmp_test open"))
121111
return;
122112

123-
bpf_object__for_each_program(prog, skel->obj)
124-
bpf_program__set_autoload(prog, false);
125-
126-
bpf_program__set_autoload(skel->progs.strncmp_bad_writable_target,
127-
true);
113+
bpf_program__set_autoload(skel->progs.strncmp_bad_writable_target, true);
128114

129115
err = strncmp_test__load(skel);
130116
ASSERT_ERR(err, "strncmp_test load bad_writable_target");
@@ -135,18 +121,13 @@ static void test_strncmp_bad_writable_target(void)
135121
static void test_strncmp_bad_not_null_term_target(void)
136122
{
137123
struct strncmp_test *skel;
138-
struct bpf_program *prog;
139124
int err;
140125

141126
skel = strncmp_test__open();
142127
if (!ASSERT_OK_PTR(skel, "strncmp_test open"))
143128
return;
144129

145-
bpf_object__for_each_program(prog, skel->obj)
146-
bpf_program__set_autoload(prog, false);
147-
148-
bpf_program__set_autoload(skel->progs.strncmp_bad_not_null_term_target,
149-
true);
130+
bpf_program__set_autoload(skel->progs.strncmp_bad_not_null_term_target, true);
150131

151132
err = strncmp_test__load(skel);
152133
ASSERT_ERR(err, "strncmp_test load bad_not_null_term_target");

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ unsigned int no_const_str_size = STRNCMP_STR_SZ;
1919

2020
char _license[] SEC("license") = "GPL";
2121

22-
SEC("tp/syscalls/sys_enter_nanosleep")
22+
SEC("?tp/syscalls/sys_enter_nanosleep")
2323
int do_strncmp(void *ctx)
2424
{
2525
if ((bpf_get_current_pid_tgid() >> 32) != target_pid)
@@ -29,23 +29,23 @@ int do_strncmp(void *ctx)
2929
return 0;
3030
}
3131

32-
SEC("tp/syscalls/sys_enter_nanosleep")
32+
SEC("?tp/syscalls/sys_enter_nanosleep")
3333
int strncmp_bad_not_const_str_size(void *ctx)
3434
{
3535
/* The value of string size is not const, so will fail */
3636
cmp_ret = bpf_strncmp(str, no_const_str_size, target);
3737
return 0;
3838
}
3939

40-
SEC("tp/syscalls/sys_enter_nanosleep")
40+
SEC("?tp/syscalls/sys_enter_nanosleep")
4141
int strncmp_bad_writable_target(void *ctx)
4242
{
4343
/* Compared target is not read-only, so will fail */
4444
cmp_ret = bpf_strncmp(str, STRNCMP_STR_SZ, writable_target);
4545
return 0;
4646
}
4747

48-
SEC("tp/syscalls/sys_enter_nanosleep")
48+
SEC("?tp/syscalls/sys_enter_nanosleep")
4949
int strncmp_bad_not_null_term_target(void *ctx)
5050
{
5151
/* Compared target is not null-terminated, so will fail */

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,63 +56,63 @@ static void spin_lock_work(void)
5656
}
5757
}
5858

59-
SEC("raw_tp/sys_enter")
59+
SEC("?raw_tp/sys_enter")
6060
int raw_tp_timer(void *ctx)
6161
{
6262
timer_work();
6363

6464
return 0;
6565
}
6666

67-
SEC("tp/syscalls/sys_enter_nanosleep")
67+
SEC("?tp/syscalls/sys_enter_nanosleep")
6868
int tp_timer(void *ctx)
6969
{
7070
timer_work();
7171

7272
return 0;
7373
}
7474

75-
SEC("kprobe/sys_nanosleep")
75+
SEC("?kprobe/sys_nanosleep")
7676
int kprobe_timer(void *ctx)
7777
{
7878
timer_work();
7979

8080
return 0;
8181
}
8282

83-
SEC("perf_event")
83+
SEC("?perf_event")
8484
int perf_event_timer(void *ctx)
8585
{
8686
timer_work();
8787

8888
return 0;
8989
}
9090

91-
SEC("raw_tp/sys_enter")
91+
SEC("?raw_tp/sys_enter")
9292
int raw_tp_spin_lock(void *ctx)
9393
{
9494
spin_lock_work();
9595

9696
return 0;
9797
}
9898

99-
SEC("tp/syscalls/sys_enter_nanosleep")
99+
SEC("?tp/syscalls/sys_enter_nanosleep")
100100
int tp_spin_lock(void *ctx)
101101
{
102102
spin_lock_work();
103103

104104
return 0;
105105
}
106106

107-
SEC("kprobe/sys_nanosleep")
107+
SEC("?kprobe/sys_nanosleep")
108108
int kprobe_spin_lock(void *ctx)
109109
{
110110
spin_lock_work();
111111

112112
return 0;
113113
}
114114

115-
SEC("perf_event")
115+
SEC("?perf_event")
116116
int perf_event_spin_lock(void *ctx)
117117
{
118118
spin_lock_work();

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ static struct bpf_sock_tuple *get_tuple(void *data, __u64 nh_off,
5252
return result;
5353
}
5454

55-
SEC("tc")
55+
SEC("?tc")
5656
int sk_lookup_success(struct __sk_buff *skb)
5757
{
5858
void *data_end = (void *)(long)skb->data_end;
@@ -78,7 +78,7 @@ int sk_lookup_success(struct __sk_buff *skb)
7878
return sk ? TC_ACT_OK : TC_ACT_UNSPEC;
7979
}
8080

81-
SEC("tc")
81+
SEC("?tc")
8282
int sk_lookup_success_simple(struct __sk_buff *skb)
8383
{
8484
struct bpf_sock_tuple tuple = {};
@@ -90,7 +90,7 @@ int sk_lookup_success_simple(struct __sk_buff *skb)
9090
return 0;
9191
}
9292

93-
SEC("tc")
93+
SEC("?tc")
9494
int err_use_after_free(struct __sk_buff *skb)
9595
{
9696
struct bpf_sock_tuple tuple = {};
@@ -105,7 +105,7 @@ int err_use_after_free(struct __sk_buff *skb)
105105
return family;
106106
}
107107

108-
SEC("tc")
108+
SEC("?tc")
109109
int err_modify_sk_pointer(struct __sk_buff *skb)
110110
{
111111
struct bpf_sock_tuple tuple = {};
@@ -120,7 +120,7 @@ int err_modify_sk_pointer(struct __sk_buff *skb)
120120
return 0;
121121
}
122122

123-
SEC("tc")
123+
SEC("?tc")
124124
int err_modify_sk_or_null_pointer(struct __sk_buff *skb)
125125
{
126126
struct bpf_sock_tuple tuple = {};
@@ -134,7 +134,7 @@ int err_modify_sk_or_null_pointer(struct __sk_buff *skb)
134134
return 0;
135135
}
136136

137-
SEC("tc")
137+
SEC("?tc")
138138
int err_no_release(struct __sk_buff *skb)
139139
{
140140
struct bpf_sock_tuple tuple = {};
@@ -143,7 +143,7 @@ int err_no_release(struct __sk_buff *skb)
143143
return 0;
144144
}
145145

146-
SEC("tc")
146+
SEC("?tc")
147147
int err_release_twice(struct __sk_buff *skb)
148148
{
149149
struct bpf_sock_tuple tuple = {};
@@ -155,7 +155,7 @@ int err_release_twice(struct __sk_buff *skb)
155155
return 0;
156156
}
157157

158-
SEC("tc")
158+
SEC("?tc")
159159
int err_release_unchecked(struct __sk_buff *skb)
160160
{
161161
struct bpf_sock_tuple tuple = {};
@@ -172,7 +172,7 @@ void lookup_no_release(struct __sk_buff *skb)
172172
bpf_sk_lookup_tcp(skb, &tuple, sizeof(tuple), BPF_F_CURRENT_NETNS, 0);
173173
}
174174

175-
SEC("tc")
175+
SEC("?tc")
176176
int err_no_release_subcall(struct __sk_buff *skb)
177177
{
178178
lookup_no_release(skb);

0 commit comments

Comments
 (0)