96 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <test_progs.h>3#include "kprobe_multi.skel.h"4#include "trace_helpers.h"5#include "bpf/libbpf_internal.h"6 7static struct ksyms *ksyms;8 9static void kprobe_multi_testmod_check(struct kprobe_multi *skel)10{11 ASSERT_EQ(skel->bss->kprobe_testmod_test1_result, 1, "kprobe_test1_result");12 ASSERT_EQ(skel->bss->kprobe_testmod_test2_result, 1, "kprobe_test2_result");13 ASSERT_EQ(skel->bss->kprobe_testmod_test3_result, 1, "kprobe_test3_result");14 15 ASSERT_EQ(skel->bss->kretprobe_testmod_test1_result, 1, "kretprobe_test1_result");16 ASSERT_EQ(skel->bss->kretprobe_testmod_test2_result, 1, "kretprobe_test2_result");17 ASSERT_EQ(skel->bss->kretprobe_testmod_test3_result, 1, "kretprobe_test3_result");18}19 20static void test_testmod_attach_api(struct bpf_kprobe_multi_opts *opts)21{22 struct kprobe_multi *skel = NULL;23 24 skel = kprobe_multi__open_and_load();25 if (!ASSERT_OK_PTR(skel, "fentry_raw_skel_load"))26 return;27 28 skel->bss->pid = getpid();29 30 skel->links.test_kprobe_testmod = bpf_program__attach_kprobe_multi_opts(31 skel->progs.test_kprobe_testmod,32 NULL, opts);33 if (!skel->links.test_kprobe_testmod)34 goto cleanup;35 36 opts->retprobe = true;37 skel->links.test_kretprobe_testmod = bpf_program__attach_kprobe_multi_opts(38 skel->progs.test_kretprobe_testmod,39 NULL, opts);40 if (!skel->links.test_kretprobe_testmod)41 goto cleanup;42 43 ASSERT_OK(trigger_module_test_read(1), "trigger_read");44 kprobe_multi_testmod_check(skel);45 46cleanup:47 kprobe_multi__destroy(skel);48}49 50static void test_testmod_attach_api_addrs(void)51{52 LIBBPF_OPTS(bpf_kprobe_multi_opts, opts);53 unsigned long long addrs[3];54 55 addrs[0] = ksym_get_addr_local(ksyms, "bpf_testmod_fentry_test1");56 ASSERT_NEQ(addrs[0], 0, "ksym_get_addr_local");57 addrs[1] = ksym_get_addr_local(ksyms, "bpf_testmod_fentry_test2");58 ASSERT_NEQ(addrs[1], 0, "ksym_get_addr_local");59 addrs[2] = ksym_get_addr_local(ksyms, "bpf_testmod_fentry_test3");60 ASSERT_NEQ(addrs[2], 0, "ksym_get_addr_local");61 62 opts.addrs = (const unsigned long *) addrs;63 opts.cnt = ARRAY_SIZE(addrs);64 65 test_testmod_attach_api(&opts);66}67 68static void test_testmod_attach_api_syms(void)69{70 LIBBPF_OPTS(bpf_kprobe_multi_opts, opts);71 const char *syms[3] = {72 "bpf_testmod_fentry_test1",73 "bpf_testmod_fentry_test2",74 "bpf_testmod_fentry_test3",75 };76 77 opts.syms = syms;78 opts.cnt = ARRAY_SIZE(syms);79 test_testmod_attach_api(&opts);80}81 82void serial_test_kprobe_multi_testmod_test(void)83{84 ksyms = load_kallsyms_local();85 if (!ASSERT_OK_PTR(ksyms, "load_kallsyms_local"))86 return;87 88 if (test__start_subtest("testmod_attach_api_syms"))89 test_testmod_attach_api_syms();90 91 if (test__start_subtest("testmod_attach_api_addrs"))92 test_testmod_attach_api_addrs();93 94 free_kallsyms_local(ksyms);95}96