|
@@ -72,6 +72,9 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
|
|
/* Make that the user-mode flag is set. */
|
|
/* Make that the user-mode flag is set. */
|
|
regs->ccs |= (1 << (U_CCS_BITNR + CCS_SHIFT));
|
|
regs->ccs |= (1 << (U_CCS_BITNR + CCS_SHIFT));
|
|
|
|
|
|
|
|
+ /* Don't perform syscall restarting */
|
|
|
|
+ regs->exs = -1;
|
|
|
|
+
|
|
/* Restore the old USP. */
|
|
/* Restore the old USP. */
|
|
err |= __get_user(old_usp, &sc->usp);
|
|
err |= __get_user(old_usp, &sc->usp);
|
|
wrusp(old_usp);
|
|
wrusp(old_usp);
|
|
@@ -427,6 +430,8 @@ do_signal(int canrestart, struct pt_regs *regs)
|
|
{
|
|
{
|
|
struct ksignal ksig;
|
|
struct ksignal ksig;
|
|
|
|
|
|
|
|
+ canrestart = canrestart && ((int)regs->exs >= 0);
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* The common case should go fast, which is why this point is
|
|
* The common case should go fast, which is why this point is
|
|
* reached from kernel-mode. If that's the case, just return
|
|
* reached from kernel-mode. If that's the case, just return
|