arm: kprobes: Fix the return address of multiple kretprobes
authorMasami Hiramatsu <mhiramat@kernel.org>
Mon, 13 Feb 2017 15:05:59 +0000 (00:05 +0900)
committerJon Medhurst <tixy@linaro.org>
Tue, 21 Mar 2017 16:24:18 +0000 (16:24 +0000)
commit06553175f585b52509c7df37d6f4a50aacb7b211
treee0ccf491aef5454736ec3c607651bccb8cb4dd1c
parent91fc862c613ab7a0ef6b0b7755c33619127f4e5a
arm: kprobes: Fix the return address of multiple kretprobes

This is arm port of commit 737480a0d525 ("kprobes/x86:
Fix the return address of multiple kretprobes").

Fix the return address of subsequent kretprobes when multiple
kretprobes are set on the same function.

For example:

  # cd /sys/kernel/debug/tracing
  # echo "r:event1 sys_symlink" > kprobe_events
  # echo "r:event2 sys_symlink" >> kprobe_events
  # echo 1 > events/kprobes/enable
  # ln -s /tmp/foo /tmp/bar

 (without this patch)

  # cat trace | grep -v ^#
              ln-82    [000] dn.2    68.446525: event1: (kretprobe_trampoline+0x0/0x18 <- SyS_symlink)
              ln-82    [000] dn.2    68.447831: event2: (ret_fast_syscall+0x0/0x1c <- SyS_symlink)

 (with this patch)

  # cat trace | grep -v ^#
              ln-81    [000] dn.1    39.463469: event1: (ret_fast_syscall+0x0/0x1c <- SyS_symlink)
              ln-81    [000] dn.1    39.464701: event2: (ret_fast_syscall+0x0/0x1c <- SyS_symlink)

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Cc: KUMANO Syuhei <kumano.prog@gmail.com>
Signed-off-by: Jon Medhurst <tixy@linaro.org>
arch/arm/probes/kprobes/core.c