test_kprobes.c (1763B)
1// SPDX-License-Identifier: GPL-2.0+ 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 9static struct kprobe kp; 10 11static void setup_kprobe(struct kunit *test, struct kprobe *kp, 12 const char *symbol, int offset) 13{ 14 kp->offset = offset; 15 kp->addr = NULL; 16 kp->symbol_name = symbol; 17} 18 19static void test_kprobe_offset(struct kunit *test, struct kprobe *kp, 20 const char *target, int offset) 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 36static void test_kprobe_odd(struct kunit *test) 37{ 38 test_kprobe_offset(test, &kp, "kprobes_target_odd", 39 kprobes_target_odd_offs); 40} 41 42static void test_kprobe_in_insn4(struct kunit *test) 43{ 44 test_kprobe_offset(test, &kp, "kprobes_target_in_insn4", 45 kprobes_target_in_insn4_offs); 46} 47 48static void test_kprobe_in_insn6_lo(struct kunit *test) 49{ 50 test_kprobe_offset(test, &kp, "kprobes_target_in_insn6_lo", 51 kprobes_target_in_insn6_lo_offs); 52} 53 54static void test_kprobe_in_insn6_hi(struct kunit *test) 55{ 56 test_kprobe_offset(test, &kp, "kprobes_target_in_insn6_hi", 57 kprobes_target_in_insn6_hi_offs); 58} 59 60static 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 68static struct kunit_suite kprobes_test_suite = { 69 .name = "kprobes_test_s390", 70 .test_cases = kprobes_testcases, 71}; 72 73kunit_test_suites(&kprobes_test_suite); 74 75MODULE_LICENSE("GPL");