|
@@ -375,9 +375,8 @@ static void set_special_pids(struct pid *pid)
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- * Let kernel threads use this to say that they
|
|
|
- * allow a certain signal (since daemonize() will
|
|
|
- * have disabled all of them by default).
|
|
|
+ * Let kernel threads use this to say that they allow a certain signal.
|
|
|
+ * Must not be used if kthread was cloned with CLONE_SIGHAND.
|
|
|
*/
|
|
|
int allow_signal(int sig)
|
|
|
{
|
|
@@ -385,14 +384,14 @@ int allow_signal(int sig)
|
|
|
return -EINVAL;
|
|
|
|
|
|
spin_lock_irq(¤t->sighand->siglock);
|
|
|
+ /* This is only needed for daemonize()'ed kthreads */
|
|
|
sigdelset(¤t->blocked, sig);
|
|
|
- if (!current->mm) {
|
|
|
- /* Kernel threads handle their own signals.
|
|
|
- Let the signal code know it'll be handled, so
|
|
|
- that they don't get converted to SIGKILL or
|
|
|
- just silently dropped */
|
|
|
- current->sighand->action[(sig)-1].sa.sa_handler = (void __user *)2;
|
|
|
- }
|
|
|
+ /*
|
|
|
+ * Kernel threads handle their own signals. Let the signal code
|
|
|
+ * know it'll be handled, so that they don't get converted to
|
|
|
+ * SIGKILL or just silently dropped.
|
|
|
+ */
|
|
|
+ current->sighand->action[(sig)-1].sa.sa_handler = (void __user *)2;
|
|
|
recalc_sigpending();
|
|
|
spin_unlock_irq(¤t->sighand->siglock);
|
|
|
return 0;
|