linux-mips
[Top] [All Lists]

Bug in get_insn_opcode.

To: linux-mips@oss.sgi.com
Subject: Bug in get_insn_opcode.
From: Carsten Langgaard <carstenl@mips.com>
Date: Fri, 02 Mar 2001 17:56:48 +0100
Sender: owner-linux-mips@oss.sgi.com
There is a bug in the function get_insn_opcode in traps.c

As 'epc' is an int pointer here, it should only be increased by 1 (4
byte) and not by 4 (4*4 = 16 bytes).
See the patch below.

/Carsten

Index: arch/mips/kernel/traps.c
===================================================================
RCS file: /home/repository/sw/linux-2.4.0/arch/mips/kernel/traps.c,v
retrieving revision 1.10
diff -u -r1.10 traps.c
--- traps.c     2001/02/28 13:46:43     1.10
+++ traps.c     2001/03/02 16:50:27
@@ -410,7 +410,7 @@

        epc = (unsigned int *) (unsigned long) regs->cp0_epc;
        if (regs->cp0_cause & CAUSEF_BD)
-               epc += 4;
+               epc++;

        if (verify_area(VERIFY_READ, epc, 4)) {
                force_sig(SIGSEGV, current);
Index: arch/mips64/kernel/traps.c
===================================================================
RCS file: /home/repository/sw/linux-2.4.0/arch/mips64/kernel/traps.c,v
retrieving revision 1.5
diff -u -r1.5 traps.c
--- traps.c     2001/02/19 16:02:52     1.5
+++ traps.c     2001/03/02 16:50:13
@@ -371,7 +371,7 @@

        epc = (unsigned int *) (unsigned long) regs->cp0_epc;
        if (regs->cp0_cause & CAUSEF_BD)
-               epc += 4;
+               epc++;

        if (verify_area(VERIFY_READ, epc, 4)) {
                force_sig(SIGSEGV, current);




--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com




<Prev in Thread] Current Thread [Next in Thread>