MIPS: Fix harmlessly missing else statement.
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>
This commit is contained in:
Родитель
90c9e79f5d
Коммит
9ec9b5ac23
|
@ -568,17 +568,20 @@ static void do_signal(struct pt_regs *regs)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (regs->regs[0]) {
|
if (regs->regs[0]) {
|
||||||
if (regs->regs[2] == ERESTARTNOHAND ||
|
switch (regs->regs[2]) {
|
||||||
regs->regs[2] == ERESTARTSYS ||
|
case ERESTARTNOHAND:
|
||||||
regs->regs[2] == ERESTARTNOINTR) {
|
case ERESTARTSYS:
|
||||||
|
case ERESTARTNOINTR:
|
||||||
regs->regs[2] = regs->regs[0];
|
regs->regs[2] = regs->regs[0];
|
||||||
regs->regs[7] = regs->regs[26];
|
regs->regs[7] = regs->regs[26];
|
||||||
regs->cp0_epc -= 4;
|
regs->cp0_epc -= 4;
|
||||||
}
|
break;
|
||||||
if (regs->regs[2] == ERESTART_RESTARTBLOCK) {
|
|
||||||
|
case ERESTART_RESTARTBLOCK:
|
||||||
regs->regs[2] = current->thread.abi->restart;
|
regs->regs[2] = current->thread.abi->restart;
|
||||||
regs->regs[7] = regs->regs[26];
|
regs->regs[7] = regs->regs[26];
|
||||||
regs->cp0_epc -= 4;
|
regs->cp0_epc -= 4;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
regs->regs[0] = 0; /* Don't deal with this again. */
|
regs->regs[0] = 0; /* Don't deal with this again. */
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче