From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: Ingo Molnar <mingo@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Frederic Weisbecker <fweisbec@gmail.com>,
Thomas Gleixner <tglx@linutronix.de>,
"H. Peter Anvin" <hpa@zytor.com>,
Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Subject: [PATCH 5/7] kprobes/x86: Fix kprobes to collectly handle IP on ftrace
Date: Sat, 08 Sep 2012 07:55:20 -0400 [thread overview]
Message-ID: <20120908115641.031808366@goodmis.org> (raw)
In-Reply-To: 20120908115515.211175517@goodmis.org
[-- Attachment #1: Type: text/plain, Size: 1899 bytes --]
Current kprobe_ftrace_handler expects regs->ip == ip, but it is
incorrect (originally on x86-64). Actually, ftrace handler sets
regs->ip = ip + MCOUNT_INSN_SIZE.
kprobe_ftrace_handler must take care for that.
Link: http://lkml.kernel.org/r/20120905143112.10329.72069.stgit@localhost.localdomain
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
arch/x86/kernel/kprobes.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/arch/x86/kernel/kprobes.c b/arch/x86/kernel/kprobes.c
index 47ae102..f49f60c 100644
--- a/arch/x86/kernel/kprobes.c
+++ b/arch/x86/kernel/kprobes.c
@@ -1072,7 +1072,8 @@ void __kprobes kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip,
if (kprobe_running()) {
kprobes_inc_nmissed_count(p);
} else {
- regs->ip += sizeof(kprobe_opcode_t);
+ /* Kprobe handler expects regs->ip = ip + 1 as breakpoint hit */
+ regs->ip = ip + sizeof(kprobe_opcode_t);
__this_cpu_write(current_kprobe, p);
kcb->kprobe_status = KPROBE_HIT_ACTIVE;
@@ -1080,13 +1081,15 @@ void __kprobes kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip,
p->pre_handler(p, regs);
if (unlikely(p->post_handler)) {
- /* Emulate singlestep as if there is a 5byte nop */
+ /*
+ * Emulate singlestep (and also recover regs->ip)
+ * as if there is a 5byte nop
+ */
regs->ip = ip + MCOUNT_INSN_SIZE;
kcb->kprobe_status = KPROBE_HIT_SSDONE;
p->post_handler(p, regs, 0);
}
__this_cpu_write(current_kprobe, NULL);
- regs->ip = ip; /* Recover for next callback */
}
end:
local_irq_restore(flags);
--
1.7.10.4
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
next prev parent reply other threads:[~2012-09-08 11:57 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-08 11:55 [PATCH 0/7] [GIT PULL][v3.7] tracing: Updates and fixes (for 3.7 queue) Steven Rostedt
2012-09-08 11:55 ` [PATCH 1/7] perf: Enable function tracing for perf core Steven Rostedt
2012-09-08 13:06 ` Frederic Weisbecker
2012-09-10 14:43 ` Steven Rostedt
2012-09-13 15:58 ` Steven Rostedt
2012-09-08 14:15 ` Namhyung Kim
2012-09-10 14:40 ` Steven Rostedt
2012-09-08 11:55 ` [PATCH 2/7] tracing: Skip printing "OK" if failed to disable event Steven Rostedt
2012-09-08 11:55 ` [PATCH 3/7] trace: Stop compiling in trace_clock unconditionally Steven Rostedt
2012-09-08 11:55 ` [PATCH 4/7] ftrace/x86: Adjust x86 regs.ip as like as x86-64 Steven Rostedt
2012-09-08 11:55 ` Steven Rostedt [this message]
2012-09-08 11:55 ` [PATCH 6/7] ftrace/x86-64: Allow to change RIP in handlers Steven Rostedt
2012-09-08 11:55 ` [PATCH 7/7] kprobes/x86: Fix to support jprobes on ftrace-based kprobe Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120908115641.031808366@goodmis.org \
--to=rostedt@goodmis.org \
--cc=a.p.zijlstra@chello.nl \
--cc=akpm@linux-foundation.org \
--cc=fweisbec@gmail.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=mingo@kernel.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.