提交 734db377 编写于 作者: P Paul Mundt

sh: kprobes: Fix up race against probe point removal.

Handle a corner case where another CPU or debugger removes the probe
point from underneath us.
Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
上级 247bc6d2
...@@ -252,6 +252,17 @@ static int __kprobes kprobe_handler(struct pt_regs *regs) ...@@ -252,6 +252,17 @@ static int __kprobes kprobe_handler(struct pt_regs *regs)
p = get_kprobe(addr); p = get_kprobe(addr);
if (!p) { if (!p) {
/* Not one of ours: let kernel handle it */ /* Not one of ours: let kernel handle it */
if (*(kprobe_opcode_t *)addr != BREAKPOINT_INSTRUCTION) {
/*
* The breakpoint instruction was removed right
* after we hit it. Another cpu has removed
* either a probepoint or a debugger breakpoint
* at this address. In either case, no further
* handling of this interrupt is appropriate.
*/
ret = 1;
}
goto no_kprobe; goto no_kprobe;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册