MIPS: Fix harmlessly missing else statement.
authorRalf Baechle <ralf@linux-mips.org>
Tue, 6 Nov 2012 13:27:19 +0000 (14:27 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Wed, 12 Dec 2012 15:52:07 +0000 (16:52 +0100)
The actual bug is a missing else statement - but really this should be
expressed using a switch() statement.

Found by Al Viro who writes "the funny thing is, it *does* work only
because r2 is syscall number and syscall number around 512 => return
value being ENOSYS and not one of ERESTART...  so we really can't hit
the first if and emerge from it with ERESTART_RESTARTBLOCK.  still
wrong to write it that way..."

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/kernel/signal.c

index 0e1a5b8..b6aa770 100644 (file)
@@ -568,17 +568,20 @@ static void do_signal(struct pt_regs *regs)
        }
 
        if (regs->regs[0]) {
-               if (regs->regs[2] == ERESTARTNOHAND ||
-                   regs->regs[2] == ERESTARTSYS ||
-                   regs->regs[2] == ERESTARTNOINTR) {
+               switch (regs->regs[2]) {
+               case ERESTARTNOHAND:
+               case ERESTARTSYS:
+               case ERESTARTNOINTR:
                        regs->regs[2] = regs->regs[0];
                        regs->regs[7] = regs->regs[26];
                        regs->cp0_epc -= 4;
-               }
-               if (regs->regs[2] == ERESTART_RESTARTBLOCK) {
+                       break;
+
+               case ERESTART_RESTARTBLOCK:
                        regs->regs[2] = current->thread.abi->restart;
                        regs->regs[7] = regs->regs[26];
                        regs->cp0_epc -= 4;
+                       break;
                }
                regs->regs[0] = 0;      /* Don't deal with this again.  */
        }