brintos

brintos / linux-shallow public Read only

0
0
Text · 2.7 KiB · 9d03528 Raw
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