]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - kernel/signal.c
Merge branch 'for-3.16' of git://linux-nfs.org/~bfields/linux
[karo-tx-linux.git] / kernel / signal.c
index a6d8c3af0ad6296f0e9c21da3bd22921f342723f..a4077e90f19fcba4776af7f62a9ed2d4ddb9de03 100644 (file)
@@ -3066,6 +3066,27 @@ COMPAT_SYSCALL_DEFINE4(rt_tgsigqueueinfo,
 }
 #endif
 
+/*
+ * For kthreads only, must not be used if cloned with CLONE_SIGHAND
+ */
+void kernel_sigaction(int sig, __sighandler_t action)
+{
+       spin_lock_irq(&current->sighand->siglock);
+       current->sighand->action[sig - 1].sa.sa_handler = action;
+       if (action == SIG_IGN) {
+               sigset_t mask;
+
+               sigemptyset(&mask);
+               sigaddset(&mask, sig);
+
+               flush_sigqueue_mask(&mask, &current->signal->shared_pending);
+               flush_sigqueue_mask(&mask, &current->pending);
+               recalc_sigpending();
+       }
+       spin_unlock_irq(&current->sighand->siglock);
+}
+EXPORT_SYMBOL(kernel_sigaction);
+
 int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact)
 {
        struct task_struct *p = current, *t;