MIPS: uprobes: fix incorrect uprobe brk handling
authorMarcin Nowakowski <marcin.nowakowski@imgtec.com>
Thu, 11 Aug 2016 07:02:30 +0000 (09:02 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Tue, 13 Sep 2016 12:13:26 +0000 (14:13 +0200)
When a uprobe-replacement breakpoint instruction is handled, a notifier
is called with DIE_UPROBE argument, but a corresponding exception notify
handler for MIPS attempts to handle DIE_BREAK instead. As a result
the breakpoint instruction isn't handled by the uprobe code and the probed
application terminates with SIGTRAP.
Fix this by changing arch_uprobe_exception_notify code to handle
DIE_UPROBE as a pre-singlestep condition instead of DIE_BREAK.

Signed-off-by: Marcin Nowakowski <marcin.nowakowski@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/13884/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/kernel/uprobes.c

index 8452d93..1149b30 100644 (file)
@@ -222,7 +222,7 @@ int arch_uprobe_exception_notify(struct notifier_block *self,
                return NOTIFY_DONE;
 
        switch (val) {
                return NOTIFY_DONE;
 
        switch (val) {
-       case DIE_BREAK:
+       case DIE_UPROBE:
                if (uprobe_pre_sstep_notifier(regs))
                        return NOTIFY_STOP;
                break;
                if (uprobe_pre_sstep_notifier(regs))
                        return NOTIFY_STOP;
                break;