123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- // SPDX-License-Identifier: GPL-2.0+
- #include <linux/kernel.h>
- #include <linux/kprobes.h>
- #include <linux/random.h>
- #include <kunit/test.h>
- #include "test_kprobes.h"
- static struct kprobe kp;
- static void setup_kprobe(struct kunit *test, struct kprobe *kp,
- const char *symbol, int offset)
- {
- kp->offset = offset;
- kp->addr = NULL;
- kp->symbol_name = symbol;
- }
- static void test_kprobe_offset(struct kunit *test, struct kprobe *kp,
- const char *target, int offset)
- {
- int ret;
- setup_kprobe(test, kp, target, 0);
- ret = register_kprobe(kp);
- if (!ret)
- unregister_kprobe(kp);
- KUNIT_EXPECT_EQ(test, 0, ret);
- setup_kprobe(test, kp, target, offset);
- ret = register_kprobe(kp);
- KUNIT_EXPECT_EQ(test, -EINVAL, ret);
- if (!ret)
- unregister_kprobe(kp);
- }
- static void test_kprobe_odd(struct kunit *test)
- {
- test_kprobe_offset(test, &kp, "kprobes_target_odd",
- kprobes_target_odd_offs);
- }
- static void test_kprobe_in_insn4(struct kunit *test)
- {
- test_kprobe_offset(test, &kp, "kprobes_target_in_insn4",
- kprobes_target_in_insn4_offs);
- }
- static void test_kprobe_in_insn6_lo(struct kunit *test)
- {
- test_kprobe_offset(test, &kp, "kprobes_target_in_insn6_lo",
- kprobes_target_in_insn6_lo_offs);
- }
- static void test_kprobe_in_insn6_hi(struct kunit *test)
- {
- test_kprobe_offset(test, &kp, "kprobes_target_in_insn6_hi",
- kprobes_target_in_insn6_hi_offs);
- }
- static struct kunit_case kprobes_testcases[] = {
- KUNIT_CASE(test_kprobe_odd),
- KUNIT_CASE(test_kprobe_in_insn4),
- KUNIT_CASE(test_kprobe_in_insn6_lo),
- KUNIT_CASE(test_kprobe_in_insn6_hi),
- {}
- };
- static struct kunit_suite kprobes_test_suite = {
- .name = "kprobes_test_s390",
- .test_cases = kprobes_testcases,
- };
- kunit_test_suites(&kprobes_test_suite);
- MODULE_LICENSE("GPL");
|