]> git.baikalelectronics.ru Git - kernel.git/commitdiff
s390/test_unwind: verify __kretprobe_trampoline is replaced
authorVasily Gorbik <gor@linux.ibm.com>
Sat, 5 Mar 2022 18:10:49 +0000 (19:10 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Sun, 27 Mar 2022 20:18:39 +0000 (22:18 +0200)
Reviewed-by: Tobias Huschle <huschle@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/lib/test_unwind.c

index 468e1ce66a33e7f931fa92b4670789b88ca94ff8..9bb067321ab4ef6aebed472384a7809d852c84ad 100644 (file)
@@ -47,7 +47,7 @@ static void print_backtrace(char *bt)
 static noinline int test_unwind(struct task_struct *task, struct pt_regs *regs,
                                unsigned long sp)
 {
-       int frame_count, prev_is_func2, seen_func2_func1;
+       int frame_count, prev_is_func2, seen_func2_func1, seen_kretprobe_trampoline;
        const int max_frames = 128;
        struct unwind_state state;
        size_t bt_pos = 0;
@@ -63,6 +63,7 @@ static noinline int test_unwind(struct task_struct *task, struct pt_regs *regs,
        frame_count = 0;
        prev_is_func2 = 0;
        seen_func2_func1 = 0;
+       seen_kretprobe_trampoline = 0;
        unwind_for_each_frame(&state, task, regs, sp) {
                unsigned long addr = unwind_get_return_address(&state);
                char sym[KSYM_SYMBOL_LEN];
@@ -88,6 +89,8 @@ static noinline int test_unwind(struct task_struct *task, struct pt_regs *regs,
                if (prev_is_func2 && str_has_prefix(sym, "unwindme_func1"))
                        seen_func2_func1 = 1;
                prev_is_func2 = str_has_prefix(sym, "unwindme_func2");
+               if (str_has_prefix(sym, "__kretprobe_trampoline+0x0/"))
+                       seen_kretprobe_trampoline = 1;
        }
 
        /* Check the results. */
@@ -103,6 +106,10 @@ static noinline int test_unwind(struct task_struct *task, struct pt_regs *regs,
                kunit_err(current_test, "Maximum number of frames exceeded\n");
                ret = -EINVAL;
        }
+       if (seen_kretprobe_trampoline) {
+               kunit_err(current_test, "__kretprobe_trampoline+0x0 in unwinding results\n");
+               ret = -EINVAL;
+       }
        if (ret || force_bt)
                print_backtrace(bt);
        kfree(bt);