mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
arch/sh: Check for kprobe trap number before trying to handle a kprobe trap
The DIE_TRAP notifier chain is run both for kprobe traps and for BUG/WARN traps. The kprobe code assumes to be only called for BREAKPOINT_INSTRUCTION, and concludes to have hit a concurrently removed kprobe if it finds anything else at the faulting locations. This includes TRAPA_BUG_OPCODE used for BUG and WARN. The consequence is that kprobe_handler returns 1. This makes kprobe_exceptions_notify return NOTIFY_STOP, and prevents handling the BUG statement. This also prevents moving $pc away from the trap instruction, so the system locks up in an endless loop Signed-off-by: Michael Karcher <[email protected]> Signed-off-by: Yoshinori Sato <[email protected]>
This commit is contained in:
parent
7c04efc8d2
commit
d3023897b4
1 changed files with 2 additions and 1 deletions
|
|
@ -485,7 +485,8 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
|
|||
struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
|
||||
|
||||
addr = (kprobe_opcode_t *) (args->regs->pc);
|
||||
if (val == DIE_TRAP) {
|
||||
if (val == DIE_TRAP &&
|
||||
args->trapnr == (BREAKPOINT_INSTRUCTION & 0xff)) {
|
||||
if (!kprobe_running()) {
|
||||
if (kprobe_handler(args->regs)) {
|
||||
ret = NOTIFY_STOP;
|
||||
|
|
|
|||
Loading…
Reference in a new issue