1 // SPDX-License-Identifier: GPL-2.0+ 1 2 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" 8 9 static struct kprobe kp; 10 11 static void setup_kprobe(struct kunit *test, s 12 const char *symbol, i 13 { 14 kp->offset = offset; 15 kp->addr = NULL; 16 kp->symbol_name = symbol; 17 } 18 19 static void test_kprobe_offset(struct kunit *t 20 const char *tar 21 { 22 int ret; 23 24 setup_kprobe(test, kp, target, 0); 25 ret = register_kprobe(kp); 26 if (!ret) 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); 32 if (!ret) 33 unregister_kprobe(kp); 34 } 35 36 static void test_kprobe_odd(struct kunit *test 37 { 38 test_kprobe_offset(test, &kp, "kprobes 39 kprobes_target_odd_ 40 } 41 42 static void test_kprobe_in_insn4(struct kunit 43 { 44 test_kprobe_offset(test, &kp, "kprobes 45 kprobes_target_in_i 46 } 47 48 static void test_kprobe_in_insn6_lo(struct kun 49 { 50 test_kprobe_offset(test, &kp, "kprobes 51 kprobes_target_in_i 52 } 53 54 static void test_kprobe_in_insn6_hi(struct kun 55 { 56 test_kprobe_offset(test, &kp, "kprobes 57 kprobes_target_in_i 58 } 59 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), 65 {} 66 }; 67 68 static struct kunit_suite kprobes_test_suite = 69 .name = "kprobes_test_s390", 70 .test_cases = kprobes_testcases, 71 }; 72 73 kunit_test_suites(&kprobes_test_suite); 74 75 MODULE_DESCRIPTION("KUnit tests for kprobes"); 76 MODULE_LICENSE("GPL"); 77
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.