17 #include <linux/kernel.h>
19 #include <linux/random.h>
23 static u32 rand1, preh_val, posth_val, jph_val;
24 static int errors, handler_errors, num_tests;
45 "incorrect value in post_handler\n");
50 static struct kprobe kp = {
51 .symbol_name =
"kprobe_target",
52 .pre_handler = kp_pre_handler,
53 .post_handler = kp_post_handler
56 static int test_kprobe(
void)
63 "register_kprobe returned %d\n", ret);
72 "kprobe pre_handler not called\n");
78 "kprobe post_handler not called\n");
90 static int kp_pre_handler2(
struct kprobe *p,
struct pt_regs *regs)
96 static void kp_post_handler2(
struct kprobe *p,
struct pt_regs *regs,
102 "incorrect value in post_handler2\n");
107 static struct kprobe kp2 = {
108 .symbol_name =
"kprobe_target2",
109 .pre_handler = kp_pre_handler2,
110 .post_handler = kp_post_handler2
113 static int test_kprobes(
void)
116 struct kprobe *kps[2] = {&kp, &kp2};
124 "register_kprobes returned %d\n", ret);
134 "kprobe pre_handler not called\n");
138 if (posth_val == 0) {
140 "kprobe post_handler not called\n");
146 ret = target2(rand1);
150 "kprobe pre_handler2 not called\n");
154 if (posth_val == 0) {
156 "kprobe post_handler2 not called\n");
165 static u32 j_kprobe_target(
u32 value)
167 if (value != rand1) {
170 "incorrect value in jprobe handler\n");
179 .entry = j_kprobe_target,
180 .kp.symbol_name =
"kprobe_target"
183 static int test_jprobe(
void)
190 "register_jprobe returned %d\n", ret);
198 "jprobe handler not called\n");
205 static struct jprobe jp2 = {
206 .entry = j_kprobe_target,
207 .kp.symbol_name =
"kprobe_target2"
210 static int test_jprobes(
void)
213 struct jprobe *jps[2] = {&
jp, &jp2};
221 "register_jprobes returned %d\n", ret);
229 "jprobe handler not called\n");
234 ret = target2(rand1);
237 "jprobe handler2 not called\n");
244 #ifdef CONFIG_KRETPROBES
255 unsigned long ret = regs_return_value(regs);
260 "incorrect value in kretprobe handler\n");
265 "call to kretprobe entry handler failed\n");
273 .handler = return_handler,
275 .kp.symbol_name =
"kprobe_target"
278 static int test_kretprobe(
void)
285 "register_kretprobe returned %d\n", ret);
291 if (krph_val != rand1) {
293 "kretprobe handler not called\n");
302 unsigned long ret = regs_return_value(regs);
307 "incorrect value in kretprobe handler2\n");
312 "call to kretprobe entry handler failed\n");
322 .kp.symbol_name =
"kprobe_target2"
325 static int test_kretprobes(
void)
336 "register_kretprobe returned %d\n", ret);
342 if (krph_val != rand1) {
344 "kretprobe handler not called\n");
349 ret = target2(rand1);
350 if (krph_val != rand1) {
352 "kretprobe handler2 not called\n");
365 target2 = kprobe_target2;
378 ret = test_kprobes();
388 ret = test_jprobes();
392 #ifdef CONFIG_KRETPROBES
394 ret = test_kretprobe();
399 ret = test_kretprobes();
406 "%d tests failed\n",
errors, num_tests);
407 else if (handler_errors)
409 "running handlers\n", handler_errors);