cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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");