Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/s390/lib/test_kprobes.c
26424 views
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
9
static struct kprobe kp;
10
11
static 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
19
static 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
36
static void test_kprobe_odd(struct kunit *test)
37
{
38
test_kprobe_offset(test, &kp, "kprobes_target_odd",
39
kprobes_target_odd_offs);
40
}
41
42
static 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
48
static 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
54
static 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
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
78