To simplify the stacktrace with pt_regs from kretprobe handler,
set the correct return address to the instruction pointer in
the pt_regs before calling kretprobe handlers.

Suggested-by: Josh Poimboeuf <jpoim...@redhat.com>
Signed-off-by: Masami Hiramatsu <mhira...@kernel.org>
---
 Changes in v3:
  - Cast the correct_ret_addr to unsigned long.
---
 kernel/kprobes.c |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/kernel/kprobes.c b/kernel/kprobes.c
index cf19edc038e4..4ce3e6f5d28d 100644
--- a/kernel/kprobes.c
+++ b/kernel/kprobes.c
@@ -1914,6 +1914,9 @@ unsigned long __kretprobe_trampoline_handler(struct 
pt_regs *regs,
                BUG_ON(1);
        }
 
+       /* Set the instruction pointer to the correct address */
+       instruction_pointer_set(regs, (unsigned long)correct_ret_addr);
+
        /* Run them. */
        first = current->kretprobe_instances.first;
        while (first) {

Reply via email to