The fill_link_info test keeps skeleton open and just creates various links. We are wrongly calling bpf_link__detach after each test to close them, we need to call bpf_link__destroy. Also we need to set the link NULL so the skeleton destroy won't try to destroy them again. Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> --- .../selftests/bpf/prog_tests/fill_link_info.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/fill_link_info.c b/tools/testing/selftests/bpf/prog_tests/fill_link_info.c index 97142a4db374..0379872c445a 100644 --- a/tools/testing/selftests/bpf/prog_tests/fill_link_info.c +++ b/tools/testing/selftests/bpf/prog_tests/fill_link_info.c @@ -22,6 +22,11 @@ static __u64 kmulti_addrs[KMULTI_CNT]; #define KPROBE_FUNC "bpf_fentry_test1" static __u64 kprobe_addr; +#define LINK_DESTROY(__link) ({ \ + bpf_link__destroy(__link); \ + __link = NULL; \ +}) + #define UPROBE_FILE "/proc/self/exe" static ssize_t uprobe_offset; /* uprobe attach point */ @@ -157,7 +162,7 @@ static void test_kprobe_fill_link_info(struct test_fill_link_info *skel, } else { kprobe_fill_invalid_user_buffer(link_fd); } - bpf_link__detach(skel->links.kprobe_run); + LINK_DESTROY(skel->links.kprobe_run); } static void test_tp_fill_link_info(struct test_fill_link_info *skel) @@ -171,7 +176,7 @@ static void test_tp_fill_link_info(struct test_fill_link_info *skel) link_fd = bpf_link__fd(skel->links.tp_run); err = verify_perf_link_info(link_fd, BPF_PERF_EVENT_TRACEPOINT, 0, 0, 0); ASSERT_OK(err, "verify_perf_link_info"); - bpf_link__detach(skel->links.tp_run); + LINK_DESTROY(skel->links.tp_run); } static void test_uprobe_fill_link_info(struct test_fill_link_info *skel, @@ -189,7 +194,7 @@ static void test_uprobe_fill_link_info(struct test_fill_link_info *skel, link_fd = bpf_link__fd(skel->links.uprobe_run); err = verify_perf_link_info(link_fd, type, 0, uprobe_offset, 0); ASSERT_OK(err, "verify_perf_link_info"); - bpf_link__detach(skel->links.uprobe_run); + LINK_DESTROY(skel->links.uprobe_run); } static int verify_kmulti_link_info(int fd, bool retprobe) @@ -295,7 +300,7 @@ static void test_kprobe_multi_fill_link_info(struct test_fill_link_info *skel, } else { verify_kmulti_invalid_user_buffer(link_fd); } - bpf_link__detach(skel->links.kmulti_run); + LINK_DESTROY(skel->links.kmulti_run); } void test_fill_link_info(void) -- 2.41.0