]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
score: don't mask signals if we fail to setup signal stack
authorMatt Fleming <matt.fleming@intel.com>
Tue, 20 Mar 2012 23:48:11 +0000 (10:48 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Tue, 3 Apr 2012 03:07:57 +0000 (13:07 +1000)
If setup_rt_frame() returns -EFAULT then we must not block any signals
in the current process.

Acked-by: Oleg Nesterov <oleg@redhat.com>
Cc: Chen Liqin <liqin.chen@sunplusct.com>
Cc: Lennox Wu <lennox.wu@gmail.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
arch/score/kernel/signal.c

index aa57440e49733e45b1183ee8cc39aaab49851eb8..bf9e33e05334e3e6ec40081d0e575e90042546fc 100644 (file)
@@ -272,12 +272,14 @@ static int handle_signal(unsigned long sig, siginfo_t *info,
         */
        ret = setup_rt_frame(ka, regs, sig, oldset, info);
 
-       spin_lock_irq(&current->sighand->siglock);
-       sigorsets(&current->blocked, &current->blocked, &ka->sa.sa_mask);
-       if (!(ka->sa.sa_flags & SA_NODEFER))
-               sigaddset(&current->blocked, sig);
-       recalc_sigpending();
-       spin_unlock_irq(&current->sighand->siglock);
+       if (ret == 0) {
+               spin_lock_irq(&current->sighand->siglock);
+               sigorsets(&current->blocked, &current->blocked, &ka->sa.sa_mask);
+               if (!(ka->sa.sa_flags & SA_NODEFER))
+                       sigaddset(&current->blocked, sig);
+               recalc_sigpending();
+               spin_unlock_irq(&current->sighand->siglock);
+       }
 
        return ret;
 }