1 // SPDX-License-Identifier: GPL-2.0+ 2 3 #include <linux/kernel.h> 4 #include <linux/kprobes.h> 5 #include <kunit/test.h> 6 #include "test-kprobes.h" 7 8 static int kprobe_dummy_handler(struct kprobe *kp, struct pt_regs *regs) 9 { 10 return 0; 11 } 12 13 static void test_kprobe_riscv(struct kunit *test) 14 { 15 unsigned int num_kprobe = 0; 16 long (*func)(void); 17 struct kprobe *kp; 18 int i; 19 20 while (test_kprobes_addresses[num_kprobe]) 21 num_kprobe++; 22 23 kp = kcalloc(num_kprobe, sizeof(*kp), GFP_KERNEL); 24 KUNIT_EXPECT_TRUE(test, kp); 25 if (!kp) 26 return; 27 28 for (i = 0; i < num_kprobe; ++i) { 29 kp[i].addr = test_kprobes_addresses[i]; 30 kp[i].pre_handler = kprobe_dummy_handler; 31 KUNIT_EXPECT_EQ(test, 0, register_kprobe(&kp[i])); 32 } 33 34 for (i = 0;; ++i) { 35 func = test_kprobes_functions[i]; 36 if (!func) 37 break; 38 KUNIT_EXPECT_EQ_MSG(test, KPROBE_TEST_MAGIC, func(), "function %d broken", i); 39 } 40 41 for (i = 0; i < num_kprobe; ++i) 42 unregister_kprobe(&kp[i]); 43 kfree(kp); 44 } 45 46 static struct kunit_case kprobes_testcases[] = { 47 KUNIT_CASE(test_kprobe_riscv), 48 {} 49 }; 50 51 static struct kunit_suite kprobes_test_suite = { 52 .name = "kprobes_test_riscv", 53 .test_cases = kprobes_testcases, 54 }; 55 56 kunit_test_suites(&kprobes_test_suite); 57