1 // SPDX-License-Identifier: GPL-2.0+
3 #include <linux/kernel.h>
4 #include <linux/kprobes.h>
5 #include <linux/random.h>
6 #include <kunit/test.h>
7 #include "test_kprobes.h"
9 static struct kprobe kp;
11 static void setup_kprobe(struct kunit *test, struct kprobe *kp,
12 const char *symbol, int offset)
16 kp->symbol_name = symbol;
19 static void test_kprobe_offset(struct kunit *test, struct kprobe *kp,
20 const char *target, int offset)
24 setup_kprobe(test, kp, target, 0);
25 ret = register_kprobe(kp);
27 unregister_kprobe(kp);
28 KUNIT_EXPECT_EQ(test, 0, ret);
29 setup_kprobe(test, kp, target, offset);
30 ret = register_kprobe(kp);
31 KUNIT_EXPECT_EQ(test, -EINVAL, ret);
33 unregister_kprobe(kp);
36 static void test_kprobe_odd(struct kunit *test)
38 test_kprobe_offset(test, &kp, "kprobes_target_odd",
39 kprobes_target_odd_offs);
42 static void test_kprobe_in_insn4(struct kunit *test)
44 test_kprobe_offset(test, &kp, "kprobes_target_in_insn4",
45 kprobes_target_in_insn4_offs);
48 static void test_kprobe_in_insn6_lo(struct kunit *test)
50 test_kprobe_offset(test, &kp, "kprobes_target_in_insn6_lo",
51 kprobes_target_in_insn6_lo_offs);
54 static void test_kprobe_in_insn6_hi(struct kunit *test)
56 test_kprobe_offset(test, &kp, "kprobes_target_in_insn6_hi",
57 kprobes_target_in_insn6_hi_offs);
60 static struct kunit_case kprobes_testcases[] = {
61 KUNIT_CASE(test_kprobe_odd),
62 KUNIT_CASE(test_kprobe_in_insn4),
63 KUNIT_CASE(test_kprobe_in_insn6_lo),
64 KUNIT_CASE(test_kprobe_in_insn6_hi),
68 static struct kunit_suite kprobes_test_suite = {
69 .name = "kprobes_test_s390",
70 .test_cases = kprobes_testcases,
73 kunit_test_suites(&kprobes_test_suite);
75 MODULE_LICENSE("GPL");