MIPS: Correct MIPS16 BREAK code interpretation
authorMaciej W. Rozycki <macro@linux-mips.org>
Fri, 3 Apr 2015 22:26:21 +0000 (23:26 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Tue, 7 Apr 2015 23:09:53 +0000 (01:09 +0200)
Correct the interpretation of the immediate MIPS16 BREAK instruction
code embedded in the instruction word across bits 10:5 rather than 11:6
as current code implies, fixing the interpretation of integer overflow
and divide by zero traps.

Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/9695/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/kernel/traps.c

index 5e1f28779340fea209439ea4c28462db394f2596..b6f23343a8db987b6a2c5a5896ea63d79f6aa360 100644 (file)
@@ -925,7 +925,7 @@ asmlinkage void do_bp(struct pt_regs *regs)
                        if (__get_user(instr[0],
                                       (u16 __user *)msk_isa16_mode(epc)))
                                goto out_sigsegv;
-                       bcode = (instr[0] >> 6) & 0x3f;
+                       bcode = (instr[0] >> 5) & 0x3f;
                        do_trap_or_bp(regs, bcode, "Break");
                        goto out;
                }