Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 165 lines 4.2 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2#include <test_progs.h> 3#include "get_func_ip_test.skel.h" 4#include "get_func_ip_uprobe_test.skel.h" 5#include "get_func_ip_fsession_test.skel.h" 6 7static noinline void uprobe_trigger(void) 8{ 9} 10 11static void test_function_entry(void) 12{ 13 struct get_func_ip_test *skel = NULL; 14 int err, prog_fd; 15 LIBBPF_OPTS(bpf_test_run_opts, topts); 16 17 skel = get_func_ip_test__open(); 18 if (!ASSERT_OK_PTR(skel, "get_func_ip_test__open")) 19 return; 20 21 err = get_func_ip_test__load(skel); 22 if (!ASSERT_OK(err, "get_func_ip_test__load")) 23 goto cleanup; 24 25 err = get_func_ip_test__attach(skel); 26 if (!ASSERT_OK(err, "get_func_ip_test__attach")) 27 goto cleanup; 28 29 skel->bss->uprobe_trigger = (unsigned long) uprobe_trigger; 30 31 prog_fd = bpf_program__fd(skel->progs.test1); 32 err = bpf_prog_test_run_opts(prog_fd, &topts); 33 ASSERT_OK(err, "test_run"); 34 ASSERT_EQ(topts.retval, 0, "test_run"); 35 36 prog_fd = bpf_program__fd(skel->progs.test5); 37 err = bpf_prog_test_run_opts(prog_fd, &topts); 38 39 ASSERT_OK(err, "test_run"); 40 41 uprobe_trigger(); 42 43 ASSERT_EQ(skel->bss->test1_result, 1, "test1_result"); 44 ASSERT_EQ(skel->bss->test2_result, 1, "test2_result"); 45 ASSERT_EQ(skel->bss->test3_result, 1, "test3_result"); 46 ASSERT_EQ(skel->bss->test4_result, 1, "test4_result"); 47 ASSERT_EQ(skel->bss->test5_result, 1, "test5_result"); 48 ASSERT_EQ(skel->bss->test7_result, 1, "test7_result"); 49 ASSERT_EQ(skel->bss->test8_result, 1, "test8_result"); 50 51cleanup: 52 get_func_ip_test__destroy(skel); 53} 54 55#ifdef __x86_64__ 56extern void uprobe_trigger_body(void); 57asm( 58".globl uprobe_trigger_body\n" 59".type uprobe_trigger_body, @function\n" 60"uprobe_trigger_body:\n" 61" nop\n" 62" ret\n" 63); 64 65static void test_function_body_kprobe(void) 66{ 67 struct get_func_ip_test *skel = NULL; 68 LIBBPF_OPTS(bpf_test_run_opts, topts); 69 LIBBPF_OPTS(bpf_kprobe_opts, kopts); 70 struct bpf_link *link6 = NULL; 71 int err, prog_fd; 72 73 skel = get_func_ip_test__open(); 74 if (!ASSERT_OK_PTR(skel, "get_func_ip_test__open")) 75 return; 76 77 /* test6 is x86_64 specific and is disabled by default, 78 * enable it for body test. 79 */ 80 bpf_program__set_autoload(skel->progs.test6, true); 81 82 err = get_func_ip_test__load(skel); 83 if (!ASSERT_OK(err, "get_func_ip_test__load")) 84 goto cleanup; 85 86 kopts.offset = skel->kconfig->CONFIG_X86_KERNEL_IBT ? 9 : 5; 87 88 link6 = bpf_program__attach_kprobe_opts(skel->progs.test6, "bpf_fentry_test6", &kopts); 89 if (!ASSERT_OK_PTR(link6, "link6")) 90 goto cleanup; 91 92 prog_fd = bpf_program__fd(skel->progs.test1); 93 err = bpf_prog_test_run_opts(prog_fd, &topts); 94 ASSERT_OK(err, "test_run"); 95 ASSERT_EQ(topts.retval, 0, "test_run"); 96 97 ASSERT_EQ(skel->bss->test6_result, 1, "test6_result"); 98 99cleanup: 100 bpf_link__destroy(link6); 101 get_func_ip_test__destroy(skel); 102} 103 104static void test_function_body_uprobe(void) 105{ 106 struct get_func_ip_uprobe_test *skel = NULL; 107 int err; 108 109 skel = get_func_ip_uprobe_test__open_and_load(); 110 if (!ASSERT_OK_PTR(skel, "get_func_ip_uprobe_test__open_and_load")) 111 return; 112 113 err = get_func_ip_uprobe_test__attach(skel); 114 if (!ASSERT_OK(err, "get_func_ip_test__attach")) 115 goto cleanup; 116 117 skel->bss->uprobe_trigger_body = (unsigned long) uprobe_trigger_body; 118 119 uprobe_trigger_body(); 120 121 ASSERT_EQ(skel->bss->test1_result, 1, "test1_result"); 122 123cleanup: 124 get_func_ip_uprobe_test__destroy(skel); 125} 126 127static void test_function_body(void) 128{ 129 test_function_body_kprobe(); 130 test_function_body_uprobe(); 131} 132#else 133#define test_function_body() 134#endif 135 136void test_get_func_ip_test(void) 137{ 138 test_function_entry(); 139 test_function_body(); 140} 141 142void test_get_func_ip_fsession_test(void) 143{ 144 struct get_func_ip_fsession_test *skel = NULL; 145 int err; 146 LIBBPF_OPTS(bpf_test_run_opts, topts); 147 148 skel = get_func_ip_fsession_test__open_and_load(); 149 if (!ASSERT_OK_PTR(skel, "get_func_ip_fsession_test__open_and_load")) 150 return; 151 152 err = get_func_ip_fsession_test__attach(skel); 153 if (!ASSERT_OK(err, "get_func_ip_fsession_test__attach")) 154 goto cleanup; 155 156 err = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.test1), &topts); 157 ASSERT_OK(err, "test_run"); 158 ASSERT_EQ(topts.retval, 0, "test_run"); 159 160 ASSERT_EQ(skel->bss->test1_entry_result, 1, "test1_entry_result"); 161 ASSERT_EQ(skel->bss->test1_exit_result, 1, "test1_exit_result"); 162 163cleanup: 164 get_func_ip_fsession_test__destroy(skel); 165}