tests: add kprobe tests for kernel and for module 93/177393/1
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Mon, 16 Apr 2018 12:37:45 +0000 (15:37 +0300)
committerVyacheslav Cherkashin <v.cherkashin@samsung.com>
Fri, 27 Apr 2018 11:58:25 +0000 (14:58 +0300)
Change-Id: I591f52b9caf5a35374744e7961d5161049c80666
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
modules/tests/kprobe_tests/kp_tests.c

index 6386f50..627517d 100644 (file)
@@ -76,6 +76,101 @@ noinline void my_kfree(const void *data)
 
 
 
+/*
+ ******************************************************************************
+ *                               kprobe in kernel                             *
+ ******************************************************************************
+ */
+static int kfunc_cnt;
+
+static struct kprobe *kp_kfunc;
+static int kfunc_h(struct kprobe *kp, struct pt_regs *regs)
+{
+       if (cur_task == current)
+               ++kfunc_cnt;
+
+       return 0;
+}
+
+static void run_test_kfunc(void)
+{
+       find_module(KBUILD_MODNAME);
+}
+
+static void do_test_kfunc(void)
+{
+       kp_reg(kp_kfunc, "find_module", kfunc_h);
+
+       run_test_kfunc();
+
+       kp_unreg(kp_kfunc);
+}
+
+static void test_kfunc(void)
+{
+       olog("Kprob in kernel:\n");
+
+       kfunc_cnt = 0;
+
+       do_test_kfunc();
+
+       if (kfunc_cnt == 1)
+               olog("    OK\n");
+       else
+               olog("    ERROR: kfunc_cnt=%d\n", kfunc_cnt);
+}
+
+
+
+
+/*
+ ******************************************************************************
+ *                               kprobe in module                             *
+ ******************************************************************************
+ */
+static int mfunc_cnt;
+
+static struct kprobe *kp_mfunc;
+static int mfunc_h(struct kprobe *kp, struct pt_regs *regs)
+{
+       if (cur_task == current)
+               ++mfunc_cnt;
+
+       return 0;
+}
+
+static void run_test_mfunc(void)
+{
+       my_kfree(NULL);
+       my_kfree(NULL);
+       my_kfree(NULL);
+}
+
+static void do_test_mfunc(void)
+{
+       kp_reg(kp_mfunc, "my_kfree", mfunc_h);
+
+       run_test_mfunc();
+
+       kp_unreg(kp_mfunc);
+}
+
+static void test_mfunc(void)
+{
+       olog("Kprob in module:\n");
+
+       mfunc_cnt = 0;
+
+       do_test_mfunc();
+
+       if (mfunc_cnt == 3)
+               olog("    OK\n");
+       else
+               olog("    ERROR: mfunc_cnt=%d\n", mfunc_cnt);
+}
+
+
+
 
 /*
  ******************************************************************************
@@ -409,6 +504,8 @@ int kp_tests_run(void)
 {
        cur_task = current;
 
+       test_kfunc();
+       test_mfunc();
        test_recursion();
        test_recursion_and_multiple_handlers();
        test_recursion_and_multiple_handlers2();