MIPS: Fix BREAK code interpretation heuristics
authorMaciej W. Rozycki <macro@linux-mips.org>
Fri, 3 Apr 2015 22:26:32 +0000 (23:26 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Tue, 7 Apr 2015 23:09:58 +0000 (01:09 +0200)
Do not lose the other half of the BREAK code where there is an upper
half.  This is so that e.g. `BREAK 7, 7' is not interpreted as a divide
by zero trap, while `BREAK 0, 7' or `BREAK 7, 0' still are.

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

index a671d3358eb63d6cc1dfdf554bb912496342d710..dc6eaf4d93ea70354223f8fcd2f7551293e78b06 100644 (file)
@@ -943,7 +943,7 @@ asmlinkage void do_bp(struct pt_regs *regs)
         * We handle both cases with a simple heuristics.  --macro
         */
        if (bcode >= (1 << 10))
-               bcode >>= 10;
+               bcode = ((bcode & ((1 << 10) - 1)) << 10) | (bcode >> 10);
 
        /*
         * notify the kprobe handlers, if instruction is likely to