[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <1420461140-27153-1-git-send-email-wangnan0@huawei.com>
Date: Mon, 5 Jan 2015 20:32:20 +0800
From: Wang Nan <wangnan0@...wei.com>
To: <masami.hiramatsu.pt@...achi.com>, <tixy@...aro.org>,
<linux@....linux.org.uk>
CC: <linux-kernel@...r.kernel.org>,
<linux-arm-kernel@...ts.infradead.org>, <lizefan@...wei.com>
Subject: [PATCH] kprobes: bugfix: force unoptimize when disable kprobes.
Original code failed to disarm the probed instruction after
echo 0 > /sys/kernel/debug/kprobes/enabled
if OPTPROBE is enabled.
This is caused by a piece of logically inconsistent code:
unoptimize_kprobe(p, false);
if (!kprobe_queued(p)) {
...
}
unoptimize_kprobe() with 'force' == false queues p onto
unoptimizing_list, so following kprobe_queued() check always fail unless
another core schedules optimizer and does the unoptimization very soon.
This logic causes arch_disarm_kprobe() failed to get execute, lefts a
breakpoint at the probed address, instead of restoring it.
This patch uses force unoptimize instead.
Signed-off-by: Wang Nan <wangnan0@...wei.com>
---
kernel/kprobes.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/kprobes.c b/kernel/kprobes.c
index b185464..9fbe0c3 100644
--- a/kernel/kprobes.c
+++ b/kernel/kprobes.c
@@ -869,7 +869,7 @@ static void __disarm_kprobe(struct kprobe *p, bool reopt)
{
struct kprobe *_p;
- unoptimize_kprobe(p, false); /* Try to unoptimize */
+ unoptimize_kprobe(p, true); /* Try to unoptimize */
if (!kprobe_queued(p)) {
arch_disarm_kprobe(p);
--
1.8.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists