Skip to content

Commit d3b0e3b

Browse files
anakryikoAlexei Starovoitov
authored andcommitted
selftests/bpf: Adopt attach_probe selftest to work on old kernels
Make sure to not use ref_ctr_off feature when running on old kernels that don't support this feature. This allows to test libbpf's legacy kprobe and uprobe logic on old kernels. Signed-off-by: Andrii Nakryiko <[email protected]> Signed-off-by: Alexei Starovoitov <[email protected]> Link: https://lore.kernel.org/bpf/[email protected]
1 parent 303a257 commit d3b0e3b

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

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

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,20 @@ void test_attach_probe(void)
1414
struct test_attach_probe* skel;
1515
size_t uprobe_offset;
1616
ssize_t base_addr, ref_ctr_offset;
17+
bool legacy;
18+
19+
/* Check if new-style kprobe/uprobe API is supported.
20+
* Kernels that support new FD-based kprobe and uprobe BPF attachment
21+
* through perf_event_open() syscall expose
22+
* /sys/bus/event_source/devices/kprobe/type and
23+
* /sys/bus/event_source/devices/uprobe/type files, respectively. They
24+
* contain magic numbers that are passed as "type" field of
25+
* perf_event_attr. Lack of such file in the system indicates legacy
26+
* kernel with old-style kprobe/uprobe attach interface through
27+
* creating per-probe event through tracefs. For such cases
28+
* ref_ctr_offset feature is not supported, so we don't test it.
29+
*/
30+
legacy = access("/sys/bus/event_source/devices/kprobe/type", F_OK) != 0;
1731

1832
base_addr = get_base_addr();
1933
if (CHECK(base_addr < 0, "get_base_addr",
@@ -45,10 +59,11 @@ void test_attach_probe(void)
4559
goto cleanup;
4660
skel->links.handle_kretprobe = kretprobe_link;
4761

48-
ASSERT_EQ(uprobe_ref_ctr, 0, "uprobe_ref_ctr_before");
62+
if (!legacy)
63+
ASSERT_EQ(uprobe_ref_ctr, 0, "uprobe_ref_ctr_before");
4964

5065
uprobe_opts.retprobe = false;
51-
uprobe_opts.ref_ctr_offset = ref_ctr_offset;
66+
uprobe_opts.ref_ctr_offset = legacy ? 0 : ref_ctr_offset;
5267
uprobe_link = bpf_program__attach_uprobe_opts(skel->progs.handle_uprobe,
5368
0 /* self pid */,
5469
"/proc/self/exe",
@@ -58,11 +73,12 @@ void test_attach_probe(void)
5873
goto cleanup;
5974
skel->links.handle_uprobe = uprobe_link;
6075

61-
ASSERT_GT(uprobe_ref_ctr, 0, "uprobe_ref_ctr_after");
76+
if (!legacy)
77+
ASSERT_GT(uprobe_ref_ctr, 0, "uprobe_ref_ctr_after");
6278

6379
/* if uprobe uses ref_ctr, uretprobe has to use ref_ctr as well */
6480
uprobe_opts.retprobe = true;
65-
uprobe_opts.ref_ctr_offset = ref_ctr_offset;
81+
uprobe_opts.ref_ctr_offset = legacy ? 0 : ref_ctr_offset;
6682
uretprobe_link = bpf_program__attach_uprobe_opts(skel->progs.handle_uretprobe,
6783
-1 /* any pid */,
6884
"/proc/self/exe",

0 commit comments

Comments
 (0)