blob: 1a942ce32ba00cc5ca773fc37ddd50aefc01248a [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
2 * linux/kernel/signal.c
3 *
4 * Copyright (C) 1991, 1992 Linus Torvalds
5 *
6 * 1997-11-02 Modified for POSIX.1b signals by Richard Henderson
7 *
8 * 2003-06-02 Jim Houston - Concurrent Computer Corp.
9 * Changes to use preallocated sigqueue structures
10 * to allow signals to be sent reliably.
11 */
12
Linus Torvalds1da177e2005-04-16 15:20:36 -070013#include <linux/slab.h>
14#include <linux/module.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070015#include <linux/init.h>
16#include <linux/sched.h>
17#include <linux/fs.h>
18#include <linux/tty.h>
19#include <linux/binfmts.h>
20#include <linux/security.h>
21#include <linux/syscalls.h>
22#include <linux/ptrace.h>
Jesper Juhl7ed20e12005-05-01 08:59:14 -070023#include <linux/signal.h>
Davide Libenzifba2afa2007-05-10 22:23:13 -070024#include <linux/signalfd.h>
Roland McGrath35de2542008-07-25 19:45:51 -070025#include <linux/tracehook.h>
Randy.Dunlapc59ede72006-01-11 12:17:46 -080026#include <linux/capability.h>
Nigel Cunningham7dfb7102006-12-06 20:34:23 -080027#include <linux/freezer.h>
Sukadev Bhattiprolu84d73782006-12-08 02:38:01 -080028#include <linux/pid_namespace.h>
29#include <linux/nsproxy.h>
30
Linus Torvalds1da177e2005-04-16 15:20:36 -070031#include <asm/param.h>
32#include <asm/uaccess.h>
33#include <asm/unistd.h>
34#include <asm/siginfo.h>
Al Viroe1396062006-05-25 10:19:47 -040035#include "audit.h" /* audit_signal_info() */
Linus Torvalds1da177e2005-04-16 15:20:36 -070036
37/*
38 * SLAB caches for signal bits.
39 */
40
Christoph Lametere18b8902006-12-06 20:33:20 -080041static struct kmem_cache *sigqueue_cachep;
Linus Torvalds1da177e2005-04-16 15:20:36 -070042
Roland McGrath35de2542008-07-25 19:45:51 -070043static void __user *sig_handler(struct task_struct *t, int sig)
Pavel Emelyanov93585ee2008-04-30 00:52:39 -070044{
Roland McGrath35de2542008-07-25 19:45:51 -070045 return t->sighand->action[sig - 1].sa.sa_handler;
46}
Pavel Emelyanov93585ee2008-04-30 00:52:39 -070047
Roland McGrath35de2542008-07-25 19:45:51 -070048static int sig_handler_ignored(void __user *handler, int sig)
49{
Pavel Emelyanov93585ee2008-04-30 00:52:39 -070050 /* Is it explicitly or implicitly ignored? */
Pavel Emelyanov93585ee2008-04-30 00:52:39 -070051 return handler == SIG_IGN ||
52 (handler == SIG_DFL && sig_kernel_ignore(sig));
53}
Linus Torvalds1da177e2005-04-16 15:20:36 -070054
55static int sig_ignored(struct task_struct *t, int sig)
56{
Roland McGrath35de2542008-07-25 19:45:51 -070057 void __user *handler;
Linus Torvalds1da177e2005-04-16 15:20:36 -070058
59 /*
60 * Blocked signals are never ignored, since the
61 * signal handler may change by the time it is
62 * unblocked.
63 */
Roland McGrath325d22d2007-11-12 15:41:55 -080064 if (sigismember(&t->blocked, sig) || sigismember(&t->real_blocked, sig))
Linus Torvalds1da177e2005-04-16 15:20:36 -070065 return 0;
66
Roland McGrath35de2542008-07-25 19:45:51 -070067 handler = sig_handler(t, sig);
68 if (!sig_handler_ignored(handler, sig))
69 return 0;
70
71 /*
72 * Tracers may want to know about even ignored signals.
73 */
74 return !tracehook_consider_ignored_signal(t, sig, handler);
Linus Torvalds1da177e2005-04-16 15:20:36 -070075}
76
77/*
78 * Re-calculate pending state from the set of locally pending
79 * signals, globally pending signals, and blocked signals.
80 */
81static inline int has_pending_signals(sigset_t *signal, sigset_t *blocked)
82{
83 unsigned long ready;
84 long i;
85
86 switch (_NSIG_WORDS) {
87 default:
88 for (i = _NSIG_WORDS, ready = 0; --i >= 0 ;)
89 ready |= signal->sig[i] &~ blocked->sig[i];
90 break;
91
92 case 4: ready = signal->sig[3] &~ blocked->sig[3];
93 ready |= signal->sig[2] &~ blocked->sig[2];
94 ready |= signal->sig[1] &~ blocked->sig[1];
95 ready |= signal->sig[0] &~ blocked->sig[0];
96 break;
97
98 case 2: ready = signal->sig[1] &~ blocked->sig[1];
99 ready |= signal->sig[0] &~ blocked->sig[0];
100 break;
101
102 case 1: ready = signal->sig[0] &~ blocked->sig[0];
103 }
104 return ready != 0;
105}
106
107#define PENDING(p,b) has_pending_signals(&(p)->signal, (b))
108
Roland McGrath7bb44ad2007-05-23 13:57:44 -0700109static int recalc_sigpending_tsk(struct task_struct *t)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700110{
111 if (t->signal->group_stop_count > 0 ||
112 PENDING(&t->pending, &t->blocked) ||
Roland McGrath7bb44ad2007-05-23 13:57:44 -0700113 PENDING(&t->signal->shared_pending, &t->blocked)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700114 set_tsk_thread_flag(t, TIF_SIGPENDING);
Roland McGrath7bb44ad2007-05-23 13:57:44 -0700115 return 1;
116 }
Roland McGrathb74d0de2007-06-06 03:59:00 -0700117 /*
118 * We must never clear the flag in another thread, or in current
119 * when it's possible the current syscall is returning -ERESTART*.
120 * So we don't clear it here, and only callers who know they should do.
121 */
Roland McGrath7bb44ad2007-05-23 13:57:44 -0700122 return 0;
123}
124
125/*
126 * After recalculating TIF_SIGPENDING, we need to make sure the task wakes up.
127 * This is superfluous when called on current, the wakeup is a harmless no-op.
128 */
129void recalc_sigpending_and_wake(struct task_struct *t)
130{
131 if (recalc_sigpending_tsk(t))
132 signal_wake_up(t, 0);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700133}
134
135void recalc_sigpending(void)
136{
Rafael J. Wysockicc5f9162007-10-29 14:37:12 -0700137 if (!recalc_sigpending_tsk(current) && !freezing(current))
Roland McGrathb74d0de2007-06-06 03:59:00 -0700138 clear_thread_flag(TIF_SIGPENDING);
139
Linus Torvalds1da177e2005-04-16 15:20:36 -0700140}
141
142/* Given the mask, find the first available signal that should be serviced. */
143
Davide Libenzifba2afa2007-05-10 22:23:13 -0700144int next_signal(struct sigpending *pending, sigset_t *mask)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700145{
146 unsigned long i, *s, *m, x;
147 int sig = 0;
148
149 s = pending->signal.sig;
150 m = mask->sig;
151 switch (_NSIG_WORDS) {
152 default:
153 for (i = 0; i < _NSIG_WORDS; ++i, ++s, ++m)
154 if ((x = *s &~ *m) != 0) {
155 sig = ffz(~x) + i*_NSIG_BPW + 1;
156 break;
157 }
158 break;
159
160 case 2: if ((x = s[0] &~ m[0]) != 0)
161 sig = 1;
162 else if ((x = s[1] &~ m[1]) != 0)
163 sig = _NSIG_BPW + 1;
164 else
165 break;
166 sig += ffz(~x);
167 break;
168
169 case 1: if ((x = *s &~ *m) != 0)
170 sig = ffz(~x) + 1;
171 break;
172 }
173
174 return sig;
175}
176
Al Virodd0fc662005-10-07 07:46:04 +0100177static struct sigqueue *__sigqueue_alloc(struct task_struct *t, gfp_t flags,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700178 int override_rlimit)
179{
180 struct sigqueue *q = NULL;
Linus Torvalds10b1fbd2006-11-04 13:03:00 -0800181 struct user_struct *user;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700182
Linus Torvalds10b1fbd2006-11-04 13:03:00 -0800183 /*
184 * In order to avoid problems with "switch_user()", we want to make
185 * sure that the compiler doesn't re-load "t->user"
186 */
187 user = t->user;
188 barrier();
189 atomic_inc(&user->sigpending);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700190 if (override_rlimit ||
Linus Torvalds10b1fbd2006-11-04 13:03:00 -0800191 atomic_read(&user->sigpending) <=
Linus Torvalds1da177e2005-04-16 15:20:36 -0700192 t->signal->rlim[RLIMIT_SIGPENDING].rlim_cur)
193 q = kmem_cache_alloc(sigqueue_cachep, flags);
194 if (unlikely(q == NULL)) {
Linus Torvalds10b1fbd2006-11-04 13:03:00 -0800195 atomic_dec(&user->sigpending);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700196 } else {
197 INIT_LIST_HEAD(&q->list);
198 q->flags = 0;
Linus Torvalds10b1fbd2006-11-04 13:03:00 -0800199 q->user = get_uid(user);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700200 }
201 return(q);
202}
203
Andrew Morton514a01b2006-02-03 03:04:41 -0800204static void __sigqueue_free(struct sigqueue *q)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700205{
206 if (q->flags & SIGQUEUE_PREALLOC)
207 return;
208 atomic_dec(&q->user->sigpending);
209 free_uid(q->user);
210 kmem_cache_free(sigqueue_cachep, q);
211}
212
Oleg Nesterov6a14c5c2006-03-28 16:11:18 -0800213void flush_sigqueue(struct sigpending *queue)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700214{
215 struct sigqueue *q;
216
217 sigemptyset(&queue->signal);
218 while (!list_empty(&queue->list)) {
219 q = list_entry(queue->list.next, struct sigqueue , list);
220 list_del_init(&q->list);
221 __sigqueue_free(q);
222 }
223}
224
225/*
226 * Flush all pending signals for a task.
227 */
Oleg Nesterovc81addc2006-03-28 16:11:17 -0800228void flush_signals(struct task_struct *t)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700229{
230 unsigned long flags;
231
232 spin_lock_irqsave(&t->sighand->siglock, flags);
Pavel Machekf5264482008-04-21 22:15:06 +0000233 clear_tsk_thread_flag(t, TIF_SIGPENDING);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700234 flush_sigqueue(&t->pending);
235 flush_sigqueue(&t->signal->shared_pending);
236 spin_unlock_irqrestore(&t->sighand->siglock, flags);
237}
238
Oleg Nesterovcbaffba2008-05-26 20:55:42 +0400239static void __flush_itimer_signals(struct sigpending *pending)
240{
241 sigset_t signal, retain;
242 struct sigqueue *q, *n;
243
244 signal = pending->signal;
245 sigemptyset(&retain);
246
247 list_for_each_entry_safe(q, n, &pending->list, list) {
248 int sig = q->info.si_signo;
249
250 if (likely(q->info.si_code != SI_TIMER)) {
251 sigaddset(&retain, sig);
252 } else {
253 sigdelset(&signal, sig);
254 list_del_init(&q->list);
255 __sigqueue_free(q);
256 }
257 }
258
259 sigorsets(&pending->signal, &signal, &retain);
260}
261
262void flush_itimer_signals(void)
263{
264 struct task_struct *tsk = current;
265 unsigned long flags;
266
267 spin_lock_irqsave(&tsk->sighand->siglock, flags);
268 __flush_itimer_signals(&tsk->pending);
269 __flush_itimer_signals(&tsk->signal->shared_pending);
270 spin_unlock_irqrestore(&tsk->sighand->siglock, flags);
271}
272
Oleg Nesterov10ab8252007-05-09 02:34:37 -0700273void ignore_signals(struct task_struct *t)
274{
275 int i;
276
277 for (i = 0; i < _NSIG; ++i)
278 t->sighand->action[i].sa.sa_handler = SIG_IGN;
279
280 flush_signals(t);
281}
282
Linus Torvalds1da177e2005-04-16 15:20:36 -0700283/*
Linus Torvalds1da177e2005-04-16 15:20:36 -0700284 * Flush all handlers for a task.
285 */
286
287void
288flush_signal_handlers(struct task_struct *t, int force_default)
289{
290 int i;
291 struct k_sigaction *ka = &t->sighand->action[0];
292 for (i = _NSIG ; i != 0 ; i--) {
293 if (force_default || ka->sa.sa_handler != SIG_IGN)
294 ka->sa.sa_handler = SIG_DFL;
295 ka->sa.sa_flags = 0;
296 sigemptyset(&ka->sa.sa_mask);
297 ka++;
298 }
299}
300
Masoud Asgharifard Sharbianiabd4f752007-07-22 11:12:28 +0200301int unhandled_signal(struct task_struct *tsk, int sig)
302{
Roland McGrath445a91d2008-07-25 19:45:52 -0700303 void __user *handler = tsk->sighand->action[sig-1].sa.sa_handler;
Serge E. Hallynb460cbc2007-10-18 23:39:52 -0700304 if (is_global_init(tsk))
Masoud Asgharifard Sharbianiabd4f752007-07-22 11:12:28 +0200305 return 1;
Roland McGrath445a91d2008-07-25 19:45:52 -0700306 if (handler != SIG_IGN && handler != SIG_DFL)
Masoud Asgharifard Sharbianiabd4f752007-07-22 11:12:28 +0200307 return 0;
Roland McGrath445a91d2008-07-25 19:45:52 -0700308 return !tracehook_consider_fatal_signal(tsk, sig, handler);
Masoud Asgharifard Sharbianiabd4f752007-07-22 11:12:28 +0200309}
310
Linus Torvalds1da177e2005-04-16 15:20:36 -0700311
312/* Notify the system that a driver wants to block all signals for this
313 * process, and wants to be notified if any signals at all were to be
314 * sent/acted upon. If the notifier routine returns non-zero, then the
315 * signal will be acted upon after all. If the notifier routine returns 0,
316 * then then signal will be blocked. Only one block per process is
317 * allowed. priv is a pointer to private data that the notifier routine
318 * can use to determine if the signal should be blocked or not. */
319
320void
321block_all_signals(int (*notifier)(void *priv), void *priv, sigset_t *mask)
322{
323 unsigned long flags;
324
325 spin_lock_irqsave(&current->sighand->siglock, flags);
326 current->notifier_mask = mask;
327 current->notifier_data = priv;
328 current->notifier = notifier;
329 spin_unlock_irqrestore(&current->sighand->siglock, flags);
330}
331
332/* Notify the system that blocking has ended. */
333
334void
335unblock_all_signals(void)
336{
337 unsigned long flags;
338
339 spin_lock_irqsave(&current->sighand->siglock, flags);
340 current->notifier = NULL;
341 current->notifier_data = NULL;
342 recalc_sigpending();
343 spin_unlock_irqrestore(&current->sighand->siglock, flags);
344}
345
Oleg Nesterov100360f2008-07-25 01:47:29 -0700346static void collect_signal(int sig, struct sigpending *list, siginfo_t *info)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700347{
348 struct sigqueue *q, *first = NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700349
Linus Torvalds1da177e2005-04-16 15:20:36 -0700350 /*
351 * Collect the siginfo appropriate to this signal. Check if
352 * there is another siginfo for the same signal.
353 */
354 list_for_each_entry(q, &list->list, list) {
355 if (q->info.si_signo == sig) {
Oleg Nesterovd4434202008-07-25 01:47:28 -0700356 if (first)
357 goto still_pending;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700358 first = q;
359 }
360 }
Oleg Nesterovd4434202008-07-25 01:47:28 -0700361
362 sigdelset(&list->signal, sig);
363
Linus Torvalds1da177e2005-04-16 15:20:36 -0700364 if (first) {
Oleg Nesterovd4434202008-07-25 01:47:28 -0700365still_pending:
Linus Torvalds1da177e2005-04-16 15:20:36 -0700366 list_del_init(&first->list);
367 copy_siginfo(info, &first->info);
368 __sigqueue_free(first);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700369 } else {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700370 /* Ok, it wasn't in the queue. This must be
371 a fast-pathed signal or we must have been
372 out of queue space. So zero out the info.
373 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700374 info->si_signo = sig;
375 info->si_errno = 0;
376 info->si_code = 0;
377 info->si_pid = 0;
378 info->si_uid = 0;
379 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700380}
381
382static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
383 siginfo_t *info)
384{
Roland McGrath27d91e02006-09-29 02:00:31 -0700385 int sig = next_signal(pending, mask);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700386
Linus Torvalds1da177e2005-04-16 15:20:36 -0700387 if (sig) {
388 if (current->notifier) {
389 if (sigismember(current->notifier_mask, sig)) {
390 if (!(current->notifier)(current->notifier_data)) {
391 clear_thread_flag(TIF_SIGPENDING);
392 return 0;
393 }
394 }
395 }
396
Oleg Nesterov100360f2008-07-25 01:47:29 -0700397 collect_signal(sig, pending, info);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700398 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700399
400 return sig;
401}
402
403/*
404 * Dequeue a signal and return the element to the caller, which is
405 * expected to free it.
406 *
407 * All callers have to hold the siglock.
408 */
409int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
410{
Pavel Emelyanovc5363d02008-04-30 00:52:40 -0700411 int signr;
Benjamin Herrenschmidtcaec4e82007-06-12 08:16:18 +1000412
413 /* We only dequeue private signals from ourselves, we don't let
414 * signalfd steal them
415 */
Davide Libenzib8fceee2007-09-20 12:40:16 -0700416 signr = __dequeue_signal(&tsk->pending, mask, info);
Thomas Gleixner8bfd9a72007-02-16 01:28:12 -0800417 if (!signr) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700418 signr = __dequeue_signal(&tsk->signal->shared_pending,
419 mask, info);
Thomas Gleixner8bfd9a72007-02-16 01:28:12 -0800420 /*
421 * itimer signal ?
422 *
423 * itimers are process shared and we restart periodic
424 * itimers in the signal delivery path to prevent DoS
425 * attacks in the high resolution timer case. This is
426 * compliant with the old way of self restarting
427 * itimers, as the SIGALRM is a legacy signal and only
428 * queued once. Changing the restart behaviour to
429 * restart the timer in the signal dequeue path is
430 * reducing the timer noise on heavy loaded !highres
431 * systems too.
432 */
433 if (unlikely(signr == SIGALRM)) {
434 struct hrtimer *tmr = &tsk->signal->real_timer;
435
436 if (!hrtimer_is_queued(tmr) &&
437 tsk->signal->it_real_incr.tv64 != 0) {
438 hrtimer_forward(tmr, tmr->base->get_time(),
439 tsk->signal->it_real_incr);
440 hrtimer_restart(tmr);
441 }
442 }
443 }
Pavel Emelyanovc5363d02008-04-30 00:52:40 -0700444
Davide Libenzib8fceee2007-09-20 12:40:16 -0700445 recalc_sigpending();
Pavel Emelyanovc5363d02008-04-30 00:52:40 -0700446 if (!signr)
447 return 0;
448
449 if (unlikely(sig_kernel_stop(signr))) {
Thomas Gleixner8bfd9a72007-02-16 01:28:12 -0800450 /*
451 * Set a marker that we have dequeued a stop signal. Our
452 * caller might release the siglock and then the pending
453 * stop signal it is about to process is no longer in the
454 * pending bitmasks, but must still be cleared by a SIGCONT
455 * (and overruled by a SIGKILL). So those cases clear this
456 * shared flag after we've set it. Note that this flag may
457 * remain set after the signal we return is ignored or
458 * handled. That doesn't matter because its only purpose
459 * is to alert stop-signal processing code when another
460 * processor has come along and cleared the flag.
461 */
Oleg Nesterov92413d72008-07-25 01:47:30 -0700462 tsk->signal->flags |= SIGNAL_STOP_DEQUEUED;
Thomas Gleixner8bfd9a72007-02-16 01:28:12 -0800463 }
Pavel Emelyanovc5363d02008-04-30 00:52:40 -0700464 if ((info->si_code & __SI_MASK) == __SI_TIMER && info->si_sys_private) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700465 /*
466 * Release the siglock to ensure proper locking order
467 * of timer locks outside of siglocks. Note, we leave
468 * irqs disabled here, since the posix-timers code is
469 * about to disable them again anyway.
470 */
471 spin_unlock(&tsk->sighand->siglock);
472 do_schedule_next_timer(info);
473 spin_lock(&tsk->sighand->siglock);
474 }
475 return signr;
476}
477
478/*
479 * Tell a process that it has a new active signal..
480 *
481 * NOTE! we rely on the previous spin_lock to
482 * lock interrupts for us! We can only be called with
483 * "siglock" held, and the local interrupt must
484 * have been disabled when that got acquired!
485 *
486 * No need to set need_resched since signal event passing
487 * goes through ->blocked
488 */
489void signal_wake_up(struct task_struct *t, int resume)
490{
491 unsigned int mask;
492
493 set_tsk_thread_flag(t, TIF_SIGPENDING);
494
495 /*
Matthew Wilcoxf021a3c2007-12-06 11:13:16 -0500496 * For SIGKILL, we want to wake it up in the stopped/traced/killable
497 * case. We don't check t->state here because there is a race with it
Linus Torvalds1da177e2005-04-16 15:20:36 -0700498 * executing another processor and just now entering stopped state.
499 * By using wake_up_state, we ensure the process will wake up and
500 * handle its death signal.
501 */
502 mask = TASK_INTERRUPTIBLE;
503 if (resume)
Matthew Wilcoxf021a3c2007-12-06 11:13:16 -0500504 mask |= TASK_WAKEKILL;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700505 if (!wake_up_state(t, mask))
506 kick_process(t);
507}
508
509/*
510 * Remove signals in mask from the pending set and queue.
511 * Returns 1 if any signals were found.
512 *
513 * All callers must be holding the siglock.
George Anzinger71fabd52006-01-08 01:02:48 -0800514 *
515 * This version takes a sigset mask and looks at all signals,
516 * not just those in the first mask word.
517 */
518static int rm_from_queue_full(sigset_t *mask, struct sigpending *s)
519{
520 struct sigqueue *q, *n;
521 sigset_t m;
522
523 sigandsets(&m, mask, &s->signal);
524 if (sigisemptyset(&m))
525 return 0;
526
527 signandsets(&s->signal, &s->signal, mask);
528 list_for_each_entry_safe(q, n, &s->list, list) {
529 if (sigismember(mask, q->info.si_signo)) {
530 list_del_init(&q->list);
531 __sigqueue_free(q);
532 }
533 }
534 return 1;
535}
536/*
537 * Remove signals in mask from the pending set and queue.
538 * Returns 1 if any signals were found.
539 *
540 * All callers must be holding the siglock.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700541 */
542static int rm_from_queue(unsigned long mask, struct sigpending *s)
543{
544 struct sigqueue *q, *n;
545
546 if (!sigtestsetmask(&s->signal, mask))
547 return 0;
548
549 sigdelsetmask(&s->signal, mask);
550 list_for_each_entry_safe(q, n, &s->list, list) {
551 if (q->info.si_signo < SIGRTMIN &&
552 (mask & sigmask(q->info.si_signo))) {
553 list_del_init(&q->list);
554 __sigqueue_free(q);
555 }
556 }
557 return 1;
558}
559
560/*
561 * Bad permissions for sending the signal
562 */
563static int check_kill_permission(int sig, struct siginfo *info,
564 struct task_struct *t)
565{
Oleg Nesterov2e2ba222008-04-30 00:53:01 -0700566 struct pid *sid;
Oleg Nesterov3b5e9e52008-04-30 00:52:42 -0700567 int error;
568
Jesper Juhl7ed20e12005-05-01 08:59:14 -0700569 if (!valid_signal(sig))
Oleg Nesterov3b5e9e52008-04-30 00:52:42 -0700570 return -EINVAL;
571
572 if (info != SEND_SIG_NOINFO && (is_si_special(info) || SI_FROMKERNEL(info)))
573 return 0;
574
575 error = audit_signal_info(sig, t); /* Let audit system see the signal */
576 if (error)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700577 return error;
Amy Griffise54dc242007-03-29 18:01:04 -0400578
Oleg Nesterov2e2ba222008-04-30 00:53:01 -0700579 if ((current->euid ^ t->suid) && (current->euid ^ t->uid) &&
580 (current->uid ^ t->suid) && (current->uid ^ t->uid) &&
581 !capable(CAP_KILL)) {
582 switch (sig) {
583 case SIGCONT:
Oleg Nesterov2e2ba222008-04-30 00:53:01 -0700584 sid = task_session(t);
Oleg Nesterov2e2ba222008-04-30 00:53:01 -0700585 /*
586 * We don't return the error if sid == NULL. The
587 * task was unhashed, the caller must notice this.
588 */
589 if (!sid || sid == task_session(current))
590 break;
591 default:
592 return -EPERM;
593 }
594 }
Steve Grubbc2f0c7c2005-05-06 12:38:39 +0100595
Amy Griffise54dc242007-03-29 18:01:04 -0400596 return security_task_kill(t, info, sig, 0);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700597}
598
599/* forward decl */
Oleg Nesterova1d5e212006-03-28 16:11:29 -0800600static void do_notify_parent_cldstop(struct task_struct *tsk, int why);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700601
602/*
Oleg Nesterov7e695a52008-04-30 00:52:59 -0700603 * Handle magic process-wide effects of stop/continue signals. Unlike
604 * the signal actions, these happen immediately at signal-generation
Linus Torvalds1da177e2005-04-16 15:20:36 -0700605 * time regardless of blocking, ignoring, or handling. This does the
606 * actual continuing for SIGCONT, but not the actual stopping for stop
Oleg Nesterov7e695a52008-04-30 00:52:59 -0700607 * signals. The process stop is done as a signal action for SIG_DFL.
608 *
609 * Returns true if the signal should be actually delivered, otherwise
610 * it should be dropped.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700611 */
Oleg Nesterov7e695a52008-04-30 00:52:59 -0700612static int prepare_signal(int sig, struct task_struct *p)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700613{
Oleg Nesterovad16a4602008-04-30 00:52:46 -0700614 struct signal_struct *signal = p->signal;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700615 struct task_struct *t;
616
Oleg Nesterov7e695a52008-04-30 00:52:59 -0700617 if (unlikely(signal->flags & SIGNAL_GROUP_EXIT)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700618 /*
Oleg Nesterov7e695a52008-04-30 00:52:59 -0700619 * The process is in the middle of dying, nothing to do.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700620 */
Oleg Nesterov7e695a52008-04-30 00:52:59 -0700621 } else if (sig_kernel_stop(sig)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700622 /*
623 * This is a stop signal. Remove SIGCONT from all queues.
624 */
Oleg Nesterovad16a4602008-04-30 00:52:46 -0700625 rm_from_queue(sigmask(SIGCONT), &signal->shared_pending);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700626 t = p;
627 do {
628 rm_from_queue(sigmask(SIGCONT), &t->pending);
Oleg Nesterovad16a4602008-04-30 00:52:46 -0700629 } while_each_thread(p, t);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700630 } else if (sig == SIGCONT) {
Oleg Nesterovfc321d22008-04-30 00:52:46 -0700631 unsigned int why;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700632 /*
633 * Remove all stop signals from all queues,
634 * and wake all threads.
635 */
Oleg Nesterovad16a4602008-04-30 00:52:46 -0700636 rm_from_queue(SIG_KERNEL_STOP_MASK, &signal->shared_pending);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700637 t = p;
638 do {
639 unsigned int state;
640 rm_from_queue(SIG_KERNEL_STOP_MASK, &t->pending);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700641 /*
642 * If there is a handler for SIGCONT, we must make
643 * sure that no thread returns to user mode before
644 * we post the signal, in case it was the only
645 * thread eligible to run the signal handler--then
646 * it must not do anything between resuming and
647 * running the handler. With the TIF_SIGPENDING
648 * flag set, the thread will pause and acquire the
649 * siglock that we hold now and until we've queued
Oleg Nesterovfc321d22008-04-30 00:52:46 -0700650 * the pending signal.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700651 *
652 * Wake up the stopped thread _after_ setting
653 * TIF_SIGPENDING
654 */
Matthew Wilcoxf021a3c2007-12-06 11:13:16 -0500655 state = __TASK_STOPPED;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700656 if (sig_user_defined(t, SIGCONT) && !sigismember(&t->blocked, SIGCONT)) {
657 set_tsk_thread_flag(t, TIF_SIGPENDING);
658 state |= TASK_INTERRUPTIBLE;
659 }
660 wake_up_state(t, state);
Oleg Nesterovad16a4602008-04-30 00:52:46 -0700661 } while_each_thread(p, t);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700662
Oleg Nesterovfc321d22008-04-30 00:52:46 -0700663 /*
664 * Notify the parent with CLD_CONTINUED if we were stopped.
665 *
666 * If we were in the middle of a group stop, we pretend it
667 * was already finished, and then continued. Since SIGCHLD
668 * doesn't queue we report only CLD_STOPPED, as if the next
669 * CLD_CONTINUED was dropped.
670 */
671 why = 0;
Oleg Nesterovad16a4602008-04-30 00:52:46 -0700672 if (signal->flags & SIGNAL_STOP_STOPPED)
Oleg Nesterovfc321d22008-04-30 00:52:46 -0700673 why |= SIGNAL_CLD_CONTINUED;
Oleg Nesterovad16a4602008-04-30 00:52:46 -0700674 else if (signal->group_stop_count)
Oleg Nesterovfc321d22008-04-30 00:52:46 -0700675 why |= SIGNAL_CLD_STOPPED;
676
677 if (why) {
Oleg Nesterov021e1ae2008-04-30 00:53:00 -0700678 /*
679 * The first thread which returns from finish_stop()
680 * will take ->siglock, notice SIGNAL_CLD_MASK, and
681 * notify its parent. See get_signal_to_deliver().
682 */
Oleg Nesterovad16a4602008-04-30 00:52:46 -0700683 signal->flags = why | SIGNAL_STOP_CONTINUED;
684 signal->group_stop_count = 0;
685 signal->group_exit_code = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700686 } else {
687 /*
688 * We are not stopped, but there could be a stop
689 * signal in the middle of being processed after
690 * being removed from the queue. Clear that too.
691 */
Oleg Nesterovad16a4602008-04-30 00:52:46 -0700692 signal->flags &= ~SIGNAL_STOP_DEQUEUED;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700693 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700694 }
Oleg Nesterov7e695a52008-04-30 00:52:59 -0700695
696 return !sig_ignored(p, sig);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700697}
698
Oleg Nesterov71f11dc2008-04-30 00:52:53 -0700699/*
700 * Test if P wants to take SIG. After we've checked all threads with this,
701 * it's equivalent to finding no threads not blocking SIG. Any threads not
702 * blocking SIG were ruled out because they are not running and already
703 * have pending signals. Such threads will dequeue from the shared queue
704 * as soon as they're available, so putting the signal on the shared queue
705 * will be equivalent to sending it to one such thread.
706 */
707static inline int wants_signal(int sig, struct task_struct *p)
708{
709 if (sigismember(&p->blocked, sig))
710 return 0;
711 if (p->flags & PF_EXITING)
712 return 0;
713 if (sig == SIGKILL)
714 return 1;
715 if (task_is_stopped_or_traced(p))
716 return 0;
717 return task_curr(p) || !signal_pending(p);
718}
719
Oleg Nesterov5fcd8352008-04-30 00:52:55 -0700720static void complete_signal(int sig, struct task_struct *p, int group)
Oleg Nesterov71f11dc2008-04-30 00:52:53 -0700721{
722 struct signal_struct *signal = p->signal;
723 struct task_struct *t;
724
725 /*
726 * Now find a thread we can wake up to take the signal off the queue.
727 *
728 * If the main thread wants the signal, it gets first crack.
729 * Probably the least surprising to the average bear.
730 */
731 if (wants_signal(sig, p))
732 t = p;
Oleg Nesterov5fcd8352008-04-30 00:52:55 -0700733 else if (!group || thread_group_empty(p))
Oleg Nesterov71f11dc2008-04-30 00:52:53 -0700734 /*
735 * There is just one thread and it does not need to be woken.
736 * It will dequeue unblocked signals before it runs again.
737 */
738 return;
739 else {
740 /*
741 * Otherwise try to find a suitable thread.
742 */
743 t = signal->curr_target;
744 while (!wants_signal(sig, t)) {
745 t = next_thread(t);
746 if (t == signal->curr_target)
747 /*
748 * No thread needs to be woken.
749 * Any eligible threads will see
750 * the signal in the queue soon.
751 */
752 return;
753 }
754 signal->curr_target = t;
755 }
756
757 /*
758 * Found a killable thread. If the signal will be fatal,
759 * then start taking the whole group down immediately.
760 */
Oleg Nesterovfae5fa42008-04-30 00:53:03 -0700761 if (sig_fatal(p, sig) &&
762 !(signal->flags & (SIGNAL_UNKILLABLE | SIGNAL_GROUP_EXIT)) &&
Oleg Nesterov71f11dc2008-04-30 00:52:53 -0700763 !sigismember(&t->real_blocked, sig) &&
Roland McGrath445a91d2008-07-25 19:45:52 -0700764 (sig == SIGKILL ||
765 !tracehook_consider_fatal_signal(t, sig, SIG_DFL))) {
Oleg Nesterov71f11dc2008-04-30 00:52:53 -0700766 /*
767 * This signal will be fatal to the whole group.
768 */
769 if (!sig_kernel_coredump(sig)) {
770 /*
771 * Start a group exit and wake everybody up.
772 * This way we don't have other threads
773 * running and doing things after a slower
774 * thread has the fatal signal pending.
775 */
776 signal->flags = SIGNAL_GROUP_EXIT;
777 signal->group_exit_code = sig;
778 signal->group_stop_count = 0;
779 t = p;
780 do {
781 sigaddset(&t->pending.signal, SIGKILL);
782 signal_wake_up(t, 1);
783 } while_each_thread(p, t);
784 return;
785 }
786 }
787
788 /*
789 * The signal is already in the shared-pending queue.
790 * Tell the chosen thread to wake up and dequeue it.
791 */
792 signal_wake_up(t, sig == SIGKILL);
793 return;
794}
795
Pavel Emelyanovaf7fff92008-04-30 00:52:34 -0700796static inline int legacy_queue(struct sigpending *signals, int sig)
797{
798 return (sig < SIGRTMIN) && sigismember(&signals->signal, sig);
799}
800
Linus Torvalds1da177e2005-04-16 15:20:36 -0700801static int send_signal(int sig, struct siginfo *info, struct task_struct *t,
Oleg Nesterov2ca35152008-04-30 00:52:54 -0700802 int group)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700803{
Oleg Nesterov2ca35152008-04-30 00:52:54 -0700804 struct sigpending *pending;
Oleg Nesterov6e65acb2008-04-30 00:52:50 -0700805 struct sigqueue *q;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700806
Oleg Nesterov6e65acb2008-04-30 00:52:50 -0700807 assert_spin_locked(&t->sighand->siglock);
Oleg Nesterov7e695a52008-04-30 00:52:59 -0700808 if (!prepare_signal(sig, t))
809 return 0;
Oleg Nesterov2ca35152008-04-30 00:52:54 -0700810
811 pending = group ? &t->signal->shared_pending : &t->pending;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700812 /*
Pavel Emelyanov2acb0242008-04-30 00:52:35 -0700813 * Short-circuit ignored signals and support queuing
814 * exactly one non-rt signal, so that we can get more
815 * detailed information about the cause of the signal.
816 */
Oleg Nesterov7e695a52008-04-30 00:52:59 -0700817 if (legacy_queue(pending, sig))
Pavel Emelyanov2acb0242008-04-30 00:52:35 -0700818 return 0;
Davide Libenzifba2afa2007-05-10 22:23:13 -0700819 /*
Linus Torvalds1da177e2005-04-16 15:20:36 -0700820 * fast-pathed signals for kernel-internal things like SIGSTOP
821 * or SIGKILL.
822 */
Oleg Nesterovb67a1b92005-10-30 15:03:44 -0800823 if (info == SEND_SIG_FORCED)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700824 goto out_set;
825
826 /* Real-time signals must be queued if sent by sigqueue, or
827 some other real-time mechanism. It is implementation
828 defined whether kill() does so. We attempt to do so, on
829 the principle of least surprise, but since kill is not
830 allowed to fail with EAGAIN when low on memory we just
831 make sure at least one signal gets delivered and don't
832 pass on the info struct. */
833
834 q = __sigqueue_alloc(t, GFP_ATOMIC, (sig < SIGRTMIN &&
Oleg Nesterov621d3122005-10-30 15:03:45 -0800835 (is_si_special(info) ||
Linus Torvalds1da177e2005-04-16 15:20:36 -0700836 info->si_code >= 0)));
837 if (q) {
Oleg Nesterov2ca35152008-04-30 00:52:54 -0700838 list_add_tail(&q->list, &pending->list);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700839 switch ((unsigned long) info) {
Oleg Nesterovb67a1b92005-10-30 15:03:44 -0800840 case (unsigned long) SEND_SIG_NOINFO:
Linus Torvalds1da177e2005-04-16 15:20:36 -0700841 q->info.si_signo = sig;
842 q->info.si_errno = 0;
843 q->info.si_code = SI_USER;
Pavel Emelyanovb4888932007-10-18 23:40:14 -0700844 q->info.si_pid = task_pid_vnr(current);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700845 q->info.si_uid = current->uid;
846 break;
Oleg Nesterovb67a1b92005-10-30 15:03:44 -0800847 case (unsigned long) SEND_SIG_PRIV:
Linus Torvalds1da177e2005-04-16 15:20:36 -0700848 q->info.si_signo = sig;
849 q->info.si_errno = 0;
850 q->info.si_code = SI_KERNEL;
851 q->info.si_pid = 0;
852 q->info.si_uid = 0;
853 break;
854 default:
855 copy_siginfo(&q->info, info);
856 break;
857 }
Oleg Nesterov621d3122005-10-30 15:03:45 -0800858 } else if (!is_si_special(info)) {
859 if (sig >= SIGRTMIN && info->si_code != SI_USER)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700860 /*
861 * Queue overflow, abort. We may abort if the signal was rt
862 * and sent by user using something other than kill().
863 */
864 return -EAGAIN;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700865 }
866
867out_set:
Oleg Nesterov53c30332008-04-30 00:53:00 -0700868 signalfd_notify(t, sig);
Oleg Nesterov2ca35152008-04-30 00:52:54 -0700869 sigaddset(&pending->signal, sig);
Pavel Emelyanov4cd4b6d2008-04-30 00:52:55 -0700870 complete_signal(sig, t, group);
871 return 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700872}
873
Ingo Molnar45807a12007-07-15 23:40:10 -0700874int print_fatal_signals;
875
876static void print_fatal_signal(struct pt_regs *regs, int signr)
877{
878 printk("%s/%d: potentially unexpected fatal signal %d.\n",
Pavel Emelyanovba25f9d2007-10-18 23:40:40 -0700879 current->comm, task_pid_nr(current), signr);
Ingo Molnar45807a12007-07-15 23:40:10 -0700880
Al Viroca5cd872007-10-29 04:31:16 +0000881#if defined(__i386__) && !defined(__arch_um__)
H. Peter Anvin65ea5b02008-01-30 13:30:56 +0100882 printk("code at %08lx: ", regs->ip);
Ingo Molnar45807a12007-07-15 23:40:10 -0700883 {
884 int i;
885 for (i = 0; i < 16; i++) {
886 unsigned char insn;
887
H. Peter Anvin65ea5b02008-01-30 13:30:56 +0100888 __get_user(insn, (unsigned char *)(regs->ip + i));
Ingo Molnar45807a12007-07-15 23:40:10 -0700889 printk("%02x ", insn);
890 }
891 }
892#endif
893 printk("\n");
894 show_regs(regs);
895}
896
897static int __init setup_print_fatal_signals(char *str)
898{
899 get_option (&str, &print_fatal_signals);
900
901 return 1;
902}
903
904__setup("print-fatal-signals=", setup_print_fatal_signals);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700905
Pavel Emelyanov4cd4b6d2008-04-30 00:52:55 -0700906int
907__group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
908{
909 return send_signal(sig, info, p, 1);
910}
911
Linus Torvalds1da177e2005-04-16 15:20:36 -0700912static int
913specific_send_sig_info(int sig, struct siginfo *info, struct task_struct *t)
914{
Pavel Emelyanov4cd4b6d2008-04-30 00:52:55 -0700915 return send_signal(sig, info, t, 0);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700916}
917
918/*
919 * Force a signal that the process can't ignore: if necessary
920 * we unblock the signal and change any SIG_IGN to SIG_DFL.
Linus Torvaldsae74c3b2006-08-02 20:17:49 -0700921 *
922 * Note: If we unblock the signal, we always reset it to SIG_DFL,
923 * since we do not want to have a signal handler that was blocked
924 * be invoked when user space had explicitly blocked it.
925 *
Oleg Nesterov80fe7282008-04-30 00:53:05 -0700926 * We don't want to have recursive SIGSEGV's etc, for example,
927 * that is why we also clear SIGNAL_UNKILLABLE.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700928 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700929int
930force_sig_info(int sig, struct siginfo *info, struct task_struct *t)
931{
932 unsigned long int flags;
Linus Torvaldsae74c3b2006-08-02 20:17:49 -0700933 int ret, blocked, ignored;
934 struct k_sigaction *action;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700935
936 spin_lock_irqsave(&t->sighand->siglock, flags);
Linus Torvaldsae74c3b2006-08-02 20:17:49 -0700937 action = &t->sighand->action[sig-1];
938 ignored = action->sa.sa_handler == SIG_IGN;
939 blocked = sigismember(&t->blocked, sig);
940 if (blocked || ignored) {
941 action->sa.sa_handler = SIG_DFL;
942 if (blocked) {
943 sigdelset(&t->blocked, sig);
Roland McGrath7bb44ad2007-05-23 13:57:44 -0700944 recalc_sigpending_and_wake(t);
Linus Torvaldsae74c3b2006-08-02 20:17:49 -0700945 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700946 }
Oleg Nesterov80fe7282008-04-30 00:53:05 -0700947 if (action->sa.sa_handler == SIG_DFL)
948 t->signal->flags &= ~SIGNAL_UNKILLABLE;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700949 ret = specific_send_sig_info(sig, info, t);
950 spin_unlock_irqrestore(&t->sighand->siglock, flags);
951
952 return ret;
953}
954
955void
956force_sig_specific(int sig, struct task_struct *t)
957{
Paul E. McKenneyb0423a02005-10-30 15:03:46 -0800958 force_sig_info(sig, SEND_SIG_FORCED, t);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700959}
960
Linus Torvalds1da177e2005-04-16 15:20:36 -0700961/*
962 * Nuke all other threads in the group.
963 */
964void zap_other_threads(struct task_struct *p)
965{
966 struct task_struct *t;
967
Linus Torvalds1da177e2005-04-16 15:20:36 -0700968 p->signal->group_stop_count = 0;
969
Linus Torvalds1da177e2005-04-16 15:20:36 -0700970 for (t = next_thread(p); t != p; t = next_thread(t)) {
971 /*
972 * Don't bother with already dead threads
973 */
974 if (t->exit_state)
975 continue;
976
Andrea Arcangeli30e0fca62005-10-30 15:02:38 -0800977 /* SIGKILL will be handled before any pending SIGSTOP */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700978 sigaddset(&t->pending.signal, SIGKILL);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700979 signal_wake_up(t, 1);
980 }
981}
982
Harvey Harrisonb5606c22008-02-13 15:03:16 -0800983int __fatal_signal_pending(struct task_struct *tsk)
Matthew Wilcoxf776d122007-12-06 11:15:50 -0500984{
985 return sigismember(&tsk->pending.signal, SIGKILL);
986}
Trond Myklebust13f09b92008-01-31 20:40:29 -0500987EXPORT_SYMBOL(__fatal_signal_pending);
Matthew Wilcoxf776d122007-12-06 11:15:50 -0500988
Oleg Nesterovf63ee722006-03-28 16:11:13 -0800989struct sighand_struct *lock_task_sighand(struct task_struct *tsk, unsigned long *flags)
990{
991 struct sighand_struct *sighand;
992
Oleg Nesterov1406f2d2008-04-30 00:52:37 -0700993 rcu_read_lock();
Oleg Nesterovf63ee722006-03-28 16:11:13 -0800994 for (;;) {
995 sighand = rcu_dereference(tsk->sighand);
996 if (unlikely(sighand == NULL))
997 break;
998
999 spin_lock_irqsave(&sighand->siglock, *flags);
1000 if (likely(sighand == tsk->sighand))
1001 break;
1002 spin_unlock_irqrestore(&sighand->siglock, *flags);
1003 }
Oleg Nesterov1406f2d2008-04-30 00:52:37 -07001004 rcu_read_unlock();
Oleg Nesterovf63ee722006-03-28 16:11:13 -08001005
1006 return sighand;
1007}
1008
Linus Torvalds1da177e2005-04-16 15:20:36 -07001009int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
1010{
1011 unsigned long flags;
1012 int ret;
1013
1014 ret = check_kill_permission(sig, info, p);
Oleg Nesterovf63ee722006-03-28 16:11:13 -08001015
1016 if (!ret && sig) {
1017 ret = -ESRCH;
1018 if (lock_task_sighand(p, &flags)) {
1019 ret = __group_send_sig_info(sig, info, p);
1020 unlock_task_sighand(p, &flags);
Ingo Molnare56d0902006-01-08 01:01:37 -08001021 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001022 }
1023
1024 return ret;
1025}
1026
1027/*
Pavel Emelyanov146a5052008-02-08 04:19:22 -08001028 * __kill_pgrp_info() sends a signal to a process group: this is what the tty
Linus Torvalds1da177e2005-04-16 15:20:36 -07001029 * control characters do (^C, ^Z etc)
1030 */
1031
Eric W. Biedermanc4b92fc2006-10-02 02:17:10 -07001032int __kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001033{
1034 struct task_struct *p = NULL;
1035 int retval, success;
1036
Linus Torvalds1da177e2005-04-16 15:20:36 -07001037 success = 0;
1038 retval = -ESRCH;
Eric W. Biedermanc4b92fc2006-10-02 02:17:10 -07001039 do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001040 int err = group_send_sig_info(sig, info, p);
1041 success |= !err;
1042 retval = err;
Eric W. Biedermanc4b92fc2006-10-02 02:17:10 -07001043 } while_each_pid_task(pgrp, PIDTYPE_PGID, p);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001044 return success ? 0 : retval;
1045}
1046
Eric W. Biedermanc4b92fc2006-10-02 02:17:10 -07001047int kill_pid_info(int sig, struct siginfo *info, struct pid *pid)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001048{
Oleg Nesterovd36174b2008-02-08 04:19:18 -08001049 int error = -ESRCH;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001050 struct task_struct *p;
1051
Ingo Molnare56d0902006-01-08 01:01:37 -08001052 rcu_read_lock();
Oleg Nesterovd36174b2008-02-08 04:19:18 -08001053retry:
Eric W. Biedermanc4b92fc2006-10-02 02:17:10 -07001054 p = pid_task(pid, PIDTYPE_PID);
Oleg Nesterovd36174b2008-02-08 04:19:18 -08001055 if (p) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001056 error = group_send_sig_info(sig, info, p);
Oleg Nesterovd36174b2008-02-08 04:19:18 -08001057 if (unlikely(error == -ESRCH))
1058 /*
1059 * The task was unhashed in between, try again.
1060 * If it is dead, pid_task() will return NULL,
1061 * if we race with de_thread() it will find the
1062 * new leader.
1063 */
1064 goto retry;
1065 }
Ingo Molnare56d0902006-01-08 01:01:37 -08001066 rcu_read_unlock();
Oleg Nesterov6ca25b52008-04-30 00:52:45 -07001067
Linus Torvalds1da177e2005-04-16 15:20:36 -07001068 return error;
1069}
1070
Matthew Wilcoxc3de4b32007-02-09 08:11:47 -07001071int
1072kill_proc_info(int sig, struct siginfo *info, pid_t pid)
Eric W. Biedermanc4b92fc2006-10-02 02:17:10 -07001073{
1074 int error;
1075 rcu_read_lock();
Pavel Emelyanovb4888932007-10-18 23:40:14 -07001076 error = kill_pid_info(sig, info, find_vpid(pid));
Eric W. Biedermanc4b92fc2006-10-02 02:17:10 -07001077 rcu_read_unlock();
1078 return error;
1079}
1080
Eric W. Biederman2425c082006-10-02 02:17:28 -07001081/* like kill_pid_info(), but doesn't use uid/euid of "current" */
1082int kill_pid_info_as_uid(int sig, struct siginfo *info, struct pid *pid,
David Quigley8f95dc52006-06-30 01:55:47 -07001083 uid_t uid, uid_t euid, u32 secid)
Harald Welte46113832005-10-10 19:44:29 +02001084{
1085 int ret = -EINVAL;
1086 struct task_struct *p;
1087
1088 if (!valid_signal(sig))
1089 return ret;
1090
1091 read_lock(&tasklist_lock);
Eric W. Biederman2425c082006-10-02 02:17:28 -07001092 p = pid_task(pid, PIDTYPE_PID);
Harald Welte46113832005-10-10 19:44:29 +02001093 if (!p) {
1094 ret = -ESRCH;
1095 goto out_unlock;
1096 }
Oleg Nesterov0811af22006-01-08 01:03:09 -08001097 if ((info == SEND_SIG_NOINFO || (!is_si_special(info) && SI_FROMUSER(info)))
Harald Welte46113832005-10-10 19:44:29 +02001098 && (euid != p->suid) && (euid != p->uid)
1099 && (uid != p->suid) && (uid != p->uid)) {
1100 ret = -EPERM;
1101 goto out_unlock;
1102 }
David Quigley8f95dc52006-06-30 01:55:47 -07001103 ret = security_task_kill(p, info, sig, secid);
1104 if (ret)
1105 goto out_unlock;
Harald Welte46113832005-10-10 19:44:29 +02001106 if (sig && p->sighand) {
1107 unsigned long flags;
1108 spin_lock_irqsave(&p->sighand->siglock, flags);
1109 ret = __group_send_sig_info(sig, info, p);
1110 spin_unlock_irqrestore(&p->sighand->siglock, flags);
1111 }
1112out_unlock:
1113 read_unlock(&tasklist_lock);
1114 return ret;
1115}
Eric W. Biederman2425c082006-10-02 02:17:28 -07001116EXPORT_SYMBOL_GPL(kill_pid_info_as_uid);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001117
1118/*
1119 * kill_something_info() interprets pid in interesting ways just like kill(2).
1120 *
1121 * POSIX specifies that kill(-1,sig) is unspecified, but what we have
1122 * is probably wrong. Should make it like BSD or SYSV.
1123 */
1124
Gustavo Fernando Padovanbc64efd2008-07-25 01:47:33 -07001125static int kill_something_info(int sig, struct siginfo *info, pid_t pid)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001126{
Eric W. Biederman8d42db182007-02-12 00:52:55 -08001127 int ret;
Pavel Emelyanovd5df7632008-02-08 04:19:22 -08001128
1129 if (pid > 0) {
1130 rcu_read_lock();
1131 ret = kill_pid_info(sig, info, find_vpid(pid));
1132 rcu_read_unlock();
1133 return ret;
1134 }
1135
1136 read_lock(&tasklist_lock);
1137 if (pid != -1) {
1138 ret = __kill_pgrp_info(sig, info,
1139 pid ? find_vpid(-pid) : task_pgrp(current));
1140 } else {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001141 int retval = 0, count = 0;
1142 struct task_struct * p;
1143
Linus Torvalds1da177e2005-04-16 15:20:36 -07001144 for_each_process(p) {
Pavel Emelyanovbac0abd2007-10-18 23:40:18 -07001145 if (p->pid > 1 && !same_thread_group(p, current)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001146 int err = group_send_sig_info(sig, info, p);
1147 ++count;
1148 if (err != -EPERM)
1149 retval = err;
1150 }
1151 }
Eric W. Biederman8d42db182007-02-12 00:52:55 -08001152 ret = count ? retval : -ESRCH;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001153 }
Pavel Emelyanovd5df7632008-02-08 04:19:22 -08001154 read_unlock(&tasklist_lock);
1155
Eric W. Biederman8d42db182007-02-12 00:52:55 -08001156 return ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001157}
1158
1159/*
1160 * These are for backward compatibility with the rest of the kernel source.
1161 */
1162
1163/*
Oleg Nesterov08d2c302008-04-30 00:52:51 -07001164 * The caller must ensure the task can't exit.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001165 */
1166int
1167send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
1168{
1169 int ret;
1170 unsigned long flags;
1171
1172 /*
1173 * Make sure legacy kernel users don't send in bad values
1174 * (normal paths check this in check_kill_permission).
1175 */
Jesper Juhl7ed20e12005-05-01 08:59:14 -07001176 if (!valid_signal(sig))
Linus Torvalds1da177e2005-04-16 15:20:36 -07001177 return -EINVAL;
1178
Linus Torvalds1da177e2005-04-16 15:20:36 -07001179 spin_lock_irqsave(&p->sighand->siglock, flags);
1180 ret = specific_send_sig_info(sig, info, p);
1181 spin_unlock_irqrestore(&p->sighand->siglock, flags);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001182 return ret;
1183}
1184
Oleg Nesterovb67a1b92005-10-30 15:03:44 -08001185#define __si_special(priv) \
1186 ((priv) ? SEND_SIG_PRIV : SEND_SIG_NOINFO)
1187
Linus Torvalds1da177e2005-04-16 15:20:36 -07001188int
1189send_sig(int sig, struct task_struct *p, int priv)
1190{
Oleg Nesterovb67a1b92005-10-30 15:03:44 -08001191 return send_sig_info(sig, __si_special(priv), p);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001192}
1193
Linus Torvalds1da177e2005-04-16 15:20:36 -07001194void
1195force_sig(int sig, struct task_struct *p)
1196{
Oleg Nesterovb67a1b92005-10-30 15:03:44 -08001197 force_sig_info(sig, SEND_SIG_PRIV, p);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001198}
1199
1200/*
1201 * When things go south during signal handling, we
1202 * will force a SIGSEGV. And if the signal that caused
1203 * the problem was already a SIGSEGV, we'll want to
1204 * make sure we don't even try to deliver the signal..
1205 */
1206int
1207force_sigsegv(int sig, struct task_struct *p)
1208{
1209 if (sig == SIGSEGV) {
1210 unsigned long flags;
1211 spin_lock_irqsave(&p->sighand->siglock, flags);
1212 p->sighand->action[sig - 1].sa.sa_handler = SIG_DFL;
1213 spin_unlock_irqrestore(&p->sighand->siglock, flags);
1214 }
1215 force_sig(SIGSEGV, p);
1216 return 0;
1217}
1218
Eric W. Biedermanc4b92fc2006-10-02 02:17:10 -07001219int kill_pgrp(struct pid *pid, int sig, int priv)
1220{
Pavel Emelyanov146a5052008-02-08 04:19:22 -08001221 int ret;
1222
1223 read_lock(&tasklist_lock);
1224 ret = __kill_pgrp_info(sig, __si_special(priv), pid);
1225 read_unlock(&tasklist_lock);
1226
1227 return ret;
Eric W. Biedermanc4b92fc2006-10-02 02:17:10 -07001228}
1229EXPORT_SYMBOL(kill_pgrp);
1230
1231int kill_pid(struct pid *pid, int sig, int priv)
1232{
1233 return kill_pid_info(sig, __si_special(priv), pid);
1234}
1235EXPORT_SYMBOL(kill_pid);
1236
Linus Torvalds1da177e2005-04-16 15:20:36 -07001237/*
1238 * These functions support sending signals using preallocated sigqueue
1239 * structures. This is needed "because realtime applications cannot
1240 * afford to lose notifications of asynchronous events, like timer
1241 * expirations or I/O completions". In the case of Posix Timers
1242 * we allocate the sigqueue structure from the timer_create. If this
1243 * allocation fails we are able to report the failure to the application
1244 * with an EAGAIN error.
1245 */
1246
1247struct sigqueue *sigqueue_alloc(void)
1248{
1249 struct sigqueue *q;
1250
1251 if ((q = __sigqueue_alloc(current, GFP_KERNEL, 0)))
1252 q->flags |= SIGQUEUE_PREALLOC;
1253 return(q);
1254}
1255
1256void sigqueue_free(struct sigqueue *q)
1257{
1258 unsigned long flags;
Oleg Nesterov60187d22007-08-30 23:56:35 -07001259 spinlock_t *lock = &current->sighand->siglock;
1260
Linus Torvalds1da177e2005-04-16 15:20:36 -07001261 BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));
1262 /*
Oleg Nesterovc8e85b4f2008-05-26 20:55:42 +04001263 * We must hold ->siglock while testing q->list
1264 * to serialize with collect_signal() or with
Oleg Nesterovda7978b2008-05-23 13:04:41 -07001265 * __exit_signal()->flush_sigqueue().
Linus Torvalds1da177e2005-04-16 15:20:36 -07001266 */
Oleg Nesterov60187d22007-08-30 23:56:35 -07001267 spin_lock_irqsave(lock, flags);
Oleg Nesterovc8e85b4f2008-05-26 20:55:42 +04001268 q->flags &= ~SIGQUEUE_PREALLOC;
1269 /*
1270 * If it is queued it will be freed when dequeued,
1271 * like the "regular" sigqueue.
1272 */
Oleg Nesterov60187d22007-08-30 23:56:35 -07001273 if (!list_empty(&q->list))
Oleg Nesterovc8e85b4f2008-05-26 20:55:42 +04001274 q = NULL;
Oleg Nesterov60187d22007-08-30 23:56:35 -07001275 spin_unlock_irqrestore(lock, flags);
1276
Oleg Nesterovc8e85b4f2008-05-26 20:55:42 +04001277 if (q)
1278 __sigqueue_free(q);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001279}
1280
Oleg Nesterovac5c2152008-04-30 00:52:57 -07001281int send_sigqueue(struct sigqueue *q, struct task_struct *t, int group)
Pavel Emelyanov9e3bd6c2008-04-30 00:52:41 -07001282{
Oleg Nesterove62e6652008-04-30 00:52:56 -07001283 int sig = q->info.si_signo;
Oleg Nesterov2ca35152008-04-30 00:52:54 -07001284 struct sigpending *pending;
Oleg Nesterove62e6652008-04-30 00:52:56 -07001285 unsigned long flags;
1286 int ret;
Oleg Nesterov2ca35152008-04-30 00:52:54 -07001287
Pavel Emelyanov4cd4b6d2008-04-30 00:52:55 -07001288 BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));
Oleg Nesterove62e6652008-04-30 00:52:56 -07001289
1290 ret = -1;
1291 if (!likely(lock_task_sighand(t, &flags)))
1292 goto ret;
1293
Oleg Nesterov7e695a52008-04-30 00:52:59 -07001294 ret = 1; /* the signal is ignored */
1295 if (!prepare_signal(sig, t))
Oleg Nesterove62e6652008-04-30 00:52:56 -07001296 goto out;
1297
1298 ret = 0;
Pavel Emelyanov9e3bd6c2008-04-30 00:52:41 -07001299 if (unlikely(!list_empty(&q->list))) {
1300 /*
1301 * If an SI_TIMER entry is already queue just increment
1302 * the overrun count.
1303 */
Pavel Emelyanov9e3bd6c2008-04-30 00:52:41 -07001304 BUG_ON(q->info.si_code != SI_TIMER);
1305 q->info.si_overrun++;
Oleg Nesterove62e6652008-04-30 00:52:56 -07001306 goto out;
Pavel Emelyanov9e3bd6c2008-04-30 00:52:41 -07001307 }
1308
Pavel Emelyanov9e3bd6c2008-04-30 00:52:41 -07001309 signalfd_notify(t, sig);
Oleg Nesterov2ca35152008-04-30 00:52:54 -07001310 pending = group ? &t->signal->shared_pending : &t->pending;
Pavel Emelyanov9e3bd6c2008-04-30 00:52:41 -07001311 list_add_tail(&q->list, &pending->list);
1312 sigaddset(&pending->signal, sig);
Pavel Emelyanov4cd4b6d2008-04-30 00:52:55 -07001313 complete_signal(sig, t, group);
Oleg Nesterove62e6652008-04-30 00:52:56 -07001314out:
1315 unlock_task_sighand(t, &flags);
1316ret:
1317 return ret;
Pavel Emelyanov9e3bd6c2008-04-30 00:52:41 -07001318}
1319
Linus Torvalds1da177e2005-04-16 15:20:36 -07001320/*
1321 * Wake up any threads in the parent blocked in wait* syscalls.
1322 */
1323static inline void __wake_up_parent(struct task_struct *p,
1324 struct task_struct *parent)
1325{
1326 wake_up_interruptible_sync(&parent->signal->wait_chldexit);
1327}
1328
1329/*
1330 * Let a parent know about the death of a child.
1331 * For a stopped/continued status change, use do_notify_parent_cldstop instead.
1332 */
1333
1334void do_notify_parent(struct task_struct *tsk, int sig)
1335{
1336 struct siginfo info;
1337 unsigned long flags;
1338 struct sighand_struct *psig;
1339
1340 BUG_ON(sig == -1);
1341
1342 /* do_notify_parent_cldstop should have been called instead. */
Matthew Wilcoxe1abb392007-12-06 11:07:35 -05001343 BUG_ON(task_is_stopped_or_traced(tsk));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001344
1345 BUG_ON(!tsk->ptrace &&
1346 (tsk->group_leader != tsk || !thread_group_empty(tsk)));
1347
1348 info.si_signo = sig;
1349 info.si_errno = 0;
Pavel Emelyanovb4888932007-10-18 23:40:14 -07001350 /*
1351 * we are under tasklist_lock here so our parent is tied to
1352 * us and cannot exit and release its namespace.
1353 *
1354 * the only it can is to switch its nsproxy with sys_unshare,
1355 * bu uncharing pid namespaces is not allowed, so we'll always
1356 * see relevant namespace
1357 *
1358 * write_lock() currently calls preempt_disable() which is the
1359 * same as rcu_read_lock(), but according to Oleg, this is not
1360 * correct to rely on this
1361 */
1362 rcu_read_lock();
1363 info.si_pid = task_pid_nr_ns(tsk, tsk->parent->nsproxy->pid_ns);
1364 rcu_read_unlock();
1365
Linus Torvalds1da177e2005-04-16 15:20:36 -07001366 info.si_uid = tsk->uid;
1367
Michael Kerriskd8878ba2008-07-25 01:47:32 -07001368 info.si_utime = cputime_to_clock_t(cputime_add(tsk->utime,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001369 tsk->signal->utime));
Michael Kerriskd8878ba2008-07-25 01:47:32 -07001370 info.si_stime = cputime_to_clock_t(cputime_add(tsk->stime,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001371 tsk->signal->stime));
1372
1373 info.si_status = tsk->exit_code & 0x7f;
1374 if (tsk->exit_code & 0x80)
1375 info.si_code = CLD_DUMPED;
1376 else if (tsk->exit_code & 0x7f)
1377 info.si_code = CLD_KILLED;
1378 else {
1379 info.si_code = CLD_EXITED;
1380 info.si_status = tsk->exit_code >> 8;
1381 }
1382
1383 psig = tsk->parent->sighand;
1384 spin_lock_irqsave(&psig->siglock, flags);
Oleg Nesterov7ed01752005-11-10 17:22:18 +03001385 if (!tsk->ptrace && sig == SIGCHLD &&
Linus Torvalds1da177e2005-04-16 15:20:36 -07001386 (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN ||
1387 (psig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT))) {
1388 /*
1389 * We are exiting and our parent doesn't care. POSIX.1
1390 * defines special semantics for setting SIGCHLD to SIG_IGN
1391 * or setting the SA_NOCLDWAIT flag: we should be reaped
1392 * automatically and not left for our parent's wait4 call.
1393 * Rather than having the parent do it as a magic kind of
1394 * signal handler, we just set this to tell do_exit that we
1395 * can be cleaned up without becoming a zombie. Note that
1396 * we still call __wake_up_parent in this case, because a
1397 * blocked sys_wait4 might now return -ECHILD.
1398 *
1399 * Whether we send SIGCHLD or not for SA_NOCLDWAIT
1400 * is implementation-defined: we do (if you don't want
1401 * it, just use SIG_IGN instead).
1402 */
1403 tsk->exit_signal = -1;
1404 if (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN)
1405 sig = 0;
1406 }
Jesper Juhl7ed20e12005-05-01 08:59:14 -07001407 if (valid_signal(sig) && sig > 0)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001408 __group_send_sig_info(sig, &info, tsk->parent);
1409 __wake_up_parent(tsk, tsk->parent);
1410 spin_unlock_irqrestore(&psig->siglock, flags);
1411}
1412
Oleg Nesterova1d5e212006-03-28 16:11:29 -08001413static void do_notify_parent_cldstop(struct task_struct *tsk, int why)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001414{
1415 struct siginfo info;
1416 unsigned long flags;
Oleg Nesterovbc505a42005-09-06 15:17:32 -07001417 struct task_struct *parent;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001418 struct sighand_struct *sighand;
1419
Oleg Nesterova1d5e212006-03-28 16:11:29 -08001420 if (tsk->ptrace & PT_PTRACED)
Oleg Nesterovbc505a42005-09-06 15:17:32 -07001421 parent = tsk->parent;
1422 else {
1423 tsk = tsk->group_leader;
1424 parent = tsk->real_parent;
1425 }
1426
Linus Torvalds1da177e2005-04-16 15:20:36 -07001427 info.si_signo = SIGCHLD;
1428 info.si_errno = 0;
Pavel Emelyanovb4888932007-10-18 23:40:14 -07001429 /*
1430 * see comment in do_notify_parent() abot the following 3 lines
1431 */
1432 rcu_read_lock();
1433 info.si_pid = task_pid_nr_ns(tsk, tsk->parent->nsproxy->pid_ns);
1434 rcu_read_unlock();
1435
Linus Torvalds1da177e2005-04-16 15:20:36 -07001436 info.si_uid = tsk->uid;
1437
Michael Kerriskd8878ba2008-07-25 01:47:32 -07001438 info.si_utime = cputime_to_clock_t(tsk->utime);
1439 info.si_stime = cputime_to_clock_t(tsk->stime);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001440
1441 info.si_code = why;
1442 switch (why) {
1443 case CLD_CONTINUED:
1444 info.si_status = SIGCONT;
1445 break;
1446 case CLD_STOPPED:
1447 info.si_status = tsk->signal->group_exit_code & 0x7f;
1448 break;
1449 case CLD_TRAPPED:
1450 info.si_status = tsk->exit_code & 0x7f;
1451 break;
1452 default:
1453 BUG();
1454 }
1455
1456 sighand = parent->sighand;
1457 spin_lock_irqsave(&sighand->siglock, flags);
1458 if (sighand->action[SIGCHLD-1].sa.sa_handler != SIG_IGN &&
1459 !(sighand->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))
1460 __group_send_sig_info(SIGCHLD, &info, parent);
1461 /*
1462 * Even if SIGCHLD is not generated, we must wake up wait4 calls.
1463 */
1464 __wake_up_parent(tsk, parent);
1465 spin_unlock_irqrestore(&sighand->siglock, flags);
1466}
1467
Oleg Nesterovd5f70c02006-06-26 00:26:07 -07001468static inline int may_ptrace_stop(void)
1469{
1470 if (!likely(current->ptrace & PT_PTRACED))
1471 return 0;
Oleg Nesterovd5f70c02006-06-26 00:26:07 -07001472 /*
1473 * Are we in the middle of do_coredump?
1474 * If so and our tracer is also part of the coredump stopping
1475 * is a deadlock situation, and pointless because our tracer
1476 * is dead so don't allow us to stop.
1477 * If SIGKILL was already sent before the caller unlocked
Oleg Nesterov999d9fc2008-07-25 01:47:41 -07001478 * ->siglock we must see ->core_state != NULL. Otherwise it
Oleg Nesterovd5f70c02006-06-26 00:26:07 -07001479 * is safe to enter schedule().
1480 */
Oleg Nesterov999d9fc2008-07-25 01:47:41 -07001481 if (unlikely(current->mm->core_state) &&
Oleg Nesterovd5f70c02006-06-26 00:26:07 -07001482 unlikely(current->mm == current->parent->mm))
1483 return 0;
1484
1485 return 1;
1486}
1487
Linus Torvalds1da177e2005-04-16 15:20:36 -07001488/*
Roland McGrath1a669c22008-02-06 01:37:37 -08001489 * Return nonzero if there is a SIGKILL that should be waking us up.
1490 * Called with the siglock held.
1491 */
1492static int sigkill_pending(struct task_struct *tsk)
1493{
Oleg Nesterov3d749b92008-07-25 01:47:37 -07001494 return sigismember(&tsk->pending.signal, SIGKILL) ||
1495 sigismember(&tsk->signal->shared_pending.signal, SIGKILL);
Roland McGrath1a669c22008-02-06 01:37:37 -08001496}
1497
1498/*
Linus Torvalds1da177e2005-04-16 15:20:36 -07001499 * This must be called with current->sighand->siglock held.
1500 *
1501 * This should be the path for all ptrace stops.
1502 * We always set current->last_siginfo while stopped here.
1503 * That makes it a way to test a stopped process for
1504 * being ptrace-stopped vs being job-control-stopped.
1505 *
Oleg Nesterov20686a32008-02-08 04:19:03 -08001506 * If we actually decide not to stop at all because the tracer
1507 * is gone, we keep current->exit_code unless clear_code.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001508 */
Oleg Nesterov20686a32008-02-08 04:19:03 -08001509static void ptrace_stop(int exit_code, int clear_code, siginfo_t *info)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001510{
Roland McGrath1a669c22008-02-06 01:37:37 -08001511 if (arch_ptrace_stop_needed(exit_code, info)) {
1512 /*
1513 * The arch code has something special to do before a
1514 * ptrace stop. This is allowed to block, e.g. for faults
1515 * on user stack pages. We can't keep the siglock while
1516 * calling arch_ptrace_stop, so we must release it now.
1517 * To preserve proper semantics, we must do this before
1518 * any signal bookkeeping like checking group_stop_count.
1519 * Meanwhile, a SIGKILL could come in before we retake the
1520 * siglock. That must prevent us from sleeping in TASK_TRACED.
1521 * So after regaining the lock, we must check for SIGKILL.
1522 */
1523 spin_unlock_irq(&current->sighand->siglock);
1524 arch_ptrace_stop(exit_code, info);
1525 spin_lock_irq(&current->sighand->siglock);
Oleg Nesterov3d749b92008-07-25 01:47:37 -07001526 if (sigkill_pending(current))
1527 return;
Roland McGrath1a669c22008-02-06 01:37:37 -08001528 }
1529
Linus Torvalds1da177e2005-04-16 15:20:36 -07001530 /*
1531 * If there is a group stop in progress,
1532 * we must participate in the bookkeeping.
1533 */
1534 if (current->signal->group_stop_count > 0)
1535 --current->signal->group_stop_count;
1536
1537 current->last_siginfo = info;
1538 current->exit_code = exit_code;
1539
1540 /* Let the debugger run. */
Oleg Nesterovd9ae90a2008-02-06 01:36:13 -08001541 __set_current_state(TASK_TRACED);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001542 spin_unlock_irq(&current->sighand->siglock);
1543 read_lock(&tasklist_lock);
Oleg Nesterov3d749b92008-07-25 01:47:37 -07001544 if (may_ptrace_stop()) {
Oleg Nesterova1d5e212006-03-28 16:11:29 -08001545 do_notify_parent_cldstop(current, CLD_TRAPPED);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001546 read_unlock(&tasklist_lock);
1547 schedule();
1548 } else {
1549 /*
1550 * By the time we got the lock, our tracer went away.
Oleg Nesterov6405f7f2008-02-08 04:19:00 -08001551 * Don't drop the lock yet, another tracer may come.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001552 */
Oleg Nesterov6405f7f2008-02-08 04:19:00 -08001553 __set_current_state(TASK_RUNNING);
Oleg Nesterov20686a32008-02-08 04:19:03 -08001554 if (clear_code)
1555 current->exit_code = 0;
Oleg Nesterov6405f7f2008-02-08 04:19:00 -08001556 read_unlock(&tasklist_lock);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001557 }
1558
1559 /*
Roland McGrath13b1c3d2008-03-03 20:22:05 -08001560 * While in TASK_TRACED, we were considered "frozen enough".
1561 * Now that we woke up, it's crucial if we're supposed to be
1562 * frozen that we freeze now before running anything substantial.
1563 */
1564 try_to_freeze();
1565
1566 /*
Linus Torvalds1da177e2005-04-16 15:20:36 -07001567 * We are back. Now reacquire the siglock before touching
1568 * last_siginfo, so that we are sure to have synchronized with
1569 * any signal-sending on another CPU that wants to examine it.
1570 */
1571 spin_lock_irq(&current->sighand->siglock);
1572 current->last_siginfo = NULL;
1573
1574 /*
1575 * Queued signals ignored us while we were stopped for tracing.
1576 * So check for any that we should take before resuming user mode.
Roland McGrathb74d0de2007-06-06 03:59:00 -07001577 * This sets TIF_SIGPENDING, but never clears it.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001578 */
Roland McGrathb74d0de2007-06-06 03:59:00 -07001579 recalc_sigpending_tsk(current);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001580}
1581
1582void ptrace_notify(int exit_code)
1583{
1584 siginfo_t info;
1585
1586 BUG_ON((exit_code & (0x7f | ~0xffff)) != SIGTRAP);
1587
1588 memset(&info, 0, sizeof info);
1589 info.si_signo = SIGTRAP;
1590 info.si_code = exit_code;
Pavel Emelyanovb4888932007-10-18 23:40:14 -07001591 info.si_pid = task_pid_vnr(current);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001592 info.si_uid = current->uid;
1593
1594 /* Let the debugger run. */
1595 spin_lock_irq(&current->sighand->siglock);
Oleg Nesterov20686a32008-02-08 04:19:03 -08001596 ptrace_stop(exit_code, 1, &info);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001597 spin_unlock_irq(&current->sighand->siglock);
1598}
1599
Linus Torvalds1da177e2005-04-16 15:20:36 -07001600static void
1601finish_stop(int stop_count)
1602{
1603 /*
1604 * If there are no other threads in the group, or if there is
1605 * a group stop in progress and we are the last to stop,
1606 * report to the parent. When ptraced, every thread reports itself.
1607 */
Oleg Nesterova1d5e212006-03-28 16:11:29 -08001608 if (stop_count == 0 || (current->ptrace & PT_PTRACED)) {
1609 read_lock(&tasklist_lock);
1610 do_notify_parent_cldstop(current, CLD_STOPPED);
1611 read_unlock(&tasklist_lock);
1612 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001613
Rafael J. Wysocki3df494a2006-12-13 00:34:28 -08001614 do {
1615 schedule();
1616 } while (try_to_freeze());
Linus Torvalds1da177e2005-04-16 15:20:36 -07001617 /*
1618 * Now we don't run again until continued.
1619 */
1620 current->exit_code = 0;
1621}
1622
1623/*
1624 * This performs the stopping for SIGSTOP and other stop signals.
1625 * We have to stop all threads in the thread group.
1626 * Returns nonzero if we've actually stopped and released the siglock.
1627 * Returns zero if we didn't stop and still hold the siglock.
1628 */
Oleg Nesterova122b342006-03-28 16:11:22 -08001629static int do_signal_stop(int signr)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001630{
1631 struct signal_struct *sig = current->signal;
Oleg Nesterovdac27f42006-03-28 16:11:28 -08001632 int stop_count;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001633
Linus Torvalds1da177e2005-04-16 15:20:36 -07001634 if (sig->group_stop_count > 0) {
1635 /*
1636 * There is a group stop in progress. We don't need to
1637 * start another one.
1638 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001639 stop_count = --sig->group_stop_count;
Oleg Nesterovdac27f42006-03-28 16:11:28 -08001640 } else {
Oleg Nesterovf558b7e2008-02-04 22:27:24 -08001641 struct task_struct *t;
1642
Oleg Nesterov2b201a92008-07-25 01:47:31 -07001643 if (!likely(sig->flags & SIGNAL_STOP_DEQUEUED) ||
Oleg Nesterov573cf9a2008-04-30 00:52:36 -07001644 unlikely(signal_group_exit(sig)))
Oleg Nesterovf558b7e2008-02-04 22:27:24 -08001645 return 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001646 /*
Linus Torvalds1da177e2005-04-16 15:20:36 -07001647 * There is no group stop already in progress.
Oleg Nesterova122b342006-03-28 16:11:22 -08001648 * We must initiate one now.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001649 */
Oleg Nesterova122b342006-03-28 16:11:22 -08001650 sig->group_exit_code = signr;
1651
1652 stop_count = 0;
1653 for (t = next_thread(current); t != current; t = next_thread(t))
1654 /*
1655 * Setting state to TASK_STOPPED for a group
1656 * stop is always done with the siglock held,
1657 * so this check has no races.
1658 */
Oleg Nesterovd12619b2008-02-08 04:19:12 -08001659 if (!(t->flags & PF_EXITING) &&
Matthew Wilcoxe1abb392007-12-06 11:07:35 -05001660 !task_is_stopped_or_traced(t)) {
Oleg Nesterova122b342006-03-28 16:11:22 -08001661 stop_count++;
1662 signal_wake_up(t, 0);
1663 }
1664 sig->group_stop_count = stop_count;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001665 }
1666
Oleg Nesterovdac27f42006-03-28 16:11:28 -08001667 if (stop_count == 0)
1668 sig->flags = SIGNAL_STOP_STOPPED;
1669 current->exit_code = sig->group_exit_code;
1670 __set_current_state(TASK_STOPPED);
1671
1672 spin_unlock_irq(&current->sighand->siglock);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001673 finish_stop(stop_count);
1674 return 1;
1675}
1676
Roland McGrath18c98b62008-04-17 18:44:38 -07001677static int ptrace_signal(int signr, siginfo_t *info,
1678 struct pt_regs *regs, void *cookie)
1679{
1680 if (!(current->ptrace & PT_PTRACED))
1681 return signr;
1682
1683 ptrace_signal_deliver(regs, cookie);
1684
1685 /* Let the debugger run. */
1686 ptrace_stop(signr, 0, info);
1687
1688 /* We're back. Did the debugger cancel the sig? */
1689 signr = current->exit_code;
1690 if (signr == 0)
1691 return signr;
1692
1693 current->exit_code = 0;
1694
1695 /* Update the siginfo structure if the signal has
1696 changed. If the debugger wanted something
1697 specific in the siginfo structure then it should
1698 have updated *info via PTRACE_SETSIGINFO. */
1699 if (signr != info->si_signo) {
1700 info->si_signo = signr;
1701 info->si_errno = 0;
1702 info->si_code = SI_USER;
1703 info->si_pid = task_pid_vnr(current->parent);
1704 info->si_uid = current->parent->uid;
1705 }
1706
1707 /* If the (new) signal is now blocked, requeue it. */
1708 if (sigismember(&current->blocked, signr)) {
1709 specific_send_sig_info(signr, info, current);
1710 signr = 0;
1711 }
1712
1713 return signr;
1714}
1715
Linus Torvalds1da177e2005-04-16 15:20:36 -07001716int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka,
1717 struct pt_regs *regs, void *cookie)
1718{
Oleg Nesterovf6b76d42008-04-30 00:52:47 -07001719 struct sighand_struct *sighand = current->sighand;
1720 struct signal_struct *signal = current->signal;
1721 int signr;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001722
Roland McGrath13b1c3d2008-03-03 20:22:05 -08001723relock:
1724 /*
1725 * We'll jump back here after any time we were stopped in TASK_STOPPED.
1726 * While in TASK_STOPPED, we were considered "frozen enough".
1727 * Now that we woke up, it's crucial if we're supposed to be
1728 * frozen that we freeze now before running anything substantial.
1729 */
Rafael J. Wysockifc558a72006-03-23 03:00:05 -08001730 try_to_freeze();
1731
Oleg Nesterovf6b76d42008-04-30 00:52:47 -07001732 spin_lock_irq(&sighand->siglock);
Oleg Nesterov021e1ae2008-04-30 00:53:00 -07001733 /*
1734 * Every stopped thread goes here after wakeup. Check to see if
1735 * we should notify the parent, prepare_signal(SIGCONT) encodes
1736 * the CLD_ si_code into SIGNAL_CLD_MASK bits.
1737 */
Oleg Nesterovf6b76d42008-04-30 00:52:47 -07001738 if (unlikely(signal->flags & SIGNAL_CLD_MASK)) {
1739 int why = (signal->flags & SIGNAL_STOP_CONTINUED)
Oleg Nesterove4420552008-04-30 00:52:44 -07001740 ? CLD_CONTINUED : CLD_STOPPED;
Oleg Nesterovf6b76d42008-04-30 00:52:47 -07001741 signal->flags &= ~SIGNAL_CLD_MASK;
1742 spin_unlock_irq(&sighand->siglock);
Oleg Nesterove4420552008-04-30 00:52:44 -07001743
1744 read_lock(&tasklist_lock);
1745 do_notify_parent_cldstop(current->group_leader, why);
1746 read_unlock(&tasklist_lock);
1747 goto relock;
1748 }
1749
Linus Torvalds1da177e2005-04-16 15:20:36 -07001750 for (;;) {
1751 struct k_sigaction *ka;
1752
Oleg Nesterovf6b76d42008-04-30 00:52:47 -07001753 if (unlikely(signal->group_stop_count > 0) &&
Oleg Nesterovf558b7e2008-02-04 22:27:24 -08001754 do_signal_stop(0))
Linus Torvalds1da177e2005-04-16 15:20:36 -07001755 goto relock;
1756
Oleg Nesterovf6b76d42008-04-30 00:52:47 -07001757 signr = dequeue_signal(current, &current->blocked, info);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001758 if (!signr)
1759 break; /* will return 0 */
1760
Roland McGrath18c98b62008-04-17 18:44:38 -07001761 if (signr != SIGKILL) {
1762 signr = ptrace_signal(signr, info, regs, cookie);
1763 if (!signr)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001764 continue;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001765 }
1766
Oleg Nesterovf6b76d42008-04-30 00:52:47 -07001767 ka = &sighand->action[signr-1];
Linus Torvalds1da177e2005-04-16 15:20:36 -07001768 if (ka->sa.sa_handler == SIG_IGN) /* Do nothing. */
1769 continue;
1770 if (ka->sa.sa_handler != SIG_DFL) {
1771 /* Run the handler. */
1772 *return_ka = *ka;
1773
1774 if (ka->sa.sa_flags & SA_ONESHOT)
1775 ka->sa.sa_handler = SIG_DFL;
1776
1777 break; /* will return non-zero "signr" value */
1778 }
1779
1780 /*
1781 * Now we are doing the default action for this signal.
1782 */
1783 if (sig_kernel_ignore(signr)) /* Default is nothing. */
1784 continue;
1785
Sukadev Bhattiprolu84d73782006-12-08 02:38:01 -08001786 /*
Sukadev Bhattiprolu0fbc26a2007-10-18 23:40:13 -07001787 * Global init gets no signals it doesn't want.
Sukadev Bhattiprolu84d73782006-12-08 02:38:01 -08001788 */
Oleg Nesterovfae5fa42008-04-30 00:53:03 -07001789 if (unlikely(signal->flags & SIGNAL_UNKILLABLE) &&
1790 !signal_group_exit(signal))
Linus Torvalds1da177e2005-04-16 15:20:36 -07001791 continue;
1792
1793 if (sig_kernel_stop(signr)) {
1794 /*
1795 * The default action is to stop all threads in
1796 * the thread group. The job control signals
1797 * do nothing in an orphaned pgrp, but SIGSTOP
1798 * always works. Note that siglock needs to be
1799 * dropped during the call to is_orphaned_pgrp()
1800 * because of lock ordering with tasklist_lock.
1801 * This allows an intervening SIGCONT to be posted.
1802 * We need to check for that and bail out if necessary.
1803 */
1804 if (signr != SIGSTOP) {
Oleg Nesterovf6b76d42008-04-30 00:52:47 -07001805 spin_unlock_irq(&sighand->siglock);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001806
1807 /* signals can be posted during this window */
1808
Eric W. Biederman3e7cd6c2007-02-12 00:52:58 -08001809 if (is_current_pgrp_orphaned())
Linus Torvalds1da177e2005-04-16 15:20:36 -07001810 goto relock;
1811
Oleg Nesterovf6b76d42008-04-30 00:52:47 -07001812 spin_lock_irq(&sighand->siglock);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001813 }
1814
1815 if (likely(do_signal_stop(signr))) {
1816 /* It released the siglock. */
1817 goto relock;
1818 }
1819
1820 /*
1821 * We didn't actually stop, due to a race
1822 * with SIGCONT or something like that.
1823 */
1824 continue;
1825 }
1826
Oleg Nesterovf6b76d42008-04-30 00:52:47 -07001827 spin_unlock_irq(&sighand->siglock);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001828
1829 /*
1830 * Anything else is fatal, maybe with a core dump.
1831 */
1832 current->flags |= PF_SIGNALED;
Oleg Nesterov2dce81b2008-04-30 00:52:58 -07001833
Linus Torvalds1da177e2005-04-16 15:20:36 -07001834 if (sig_kernel_coredump(signr)) {
Oleg Nesterov2dce81b2008-04-30 00:52:58 -07001835 if (print_fatal_signals)
1836 print_fatal_signal(regs, signr);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001837 /*
1838 * If it was able to dump core, this kills all
1839 * other threads in the group and synchronizes with
1840 * their demise. If we lost the race with another
1841 * thread getting here, it set group_exit_code
1842 * first and our do_group_exit call below will use
1843 * that value and ignore the one we pass it.
1844 */
1845 do_coredump((long)signr, signr, regs);
1846 }
1847
1848 /*
1849 * Death signals, no core dump.
1850 */
1851 do_group_exit(signr);
1852 /* NOTREACHED */
1853 }
Oleg Nesterovf6b76d42008-04-30 00:52:47 -07001854 spin_unlock_irq(&sighand->siglock);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001855 return signr;
1856}
1857
Oleg Nesterovd12619b2008-02-08 04:19:12 -08001858void exit_signals(struct task_struct *tsk)
1859{
1860 int group_stop = 0;
Oleg Nesterov5dee1702008-02-08 04:19:13 -08001861 struct task_struct *t;
Oleg Nesterovd12619b2008-02-08 04:19:12 -08001862
Oleg Nesterov5dee1702008-02-08 04:19:13 -08001863 if (thread_group_empty(tsk) || signal_group_exit(tsk->signal)) {
1864 tsk->flags |= PF_EXITING;
1865 return;
Oleg Nesterovd12619b2008-02-08 04:19:12 -08001866 }
1867
Oleg Nesterov5dee1702008-02-08 04:19:13 -08001868 spin_lock_irq(&tsk->sighand->siglock);
Oleg Nesterovd12619b2008-02-08 04:19:12 -08001869 /*
1870 * From now this task is not visible for group-wide signals,
1871 * see wants_signal(), do_signal_stop().
1872 */
1873 tsk->flags |= PF_EXITING;
Oleg Nesterov5dee1702008-02-08 04:19:13 -08001874 if (!signal_pending(tsk))
1875 goto out;
1876
1877 /* It could be that __group_complete_signal() choose us to
1878 * notify about group-wide signal. Another thread should be
1879 * woken now to take the signal since we will not.
1880 */
1881 for (t = tsk; (t = next_thread(t)) != tsk; )
1882 if (!signal_pending(t) && !(t->flags & PF_EXITING))
1883 recalc_sigpending_and_wake(t);
1884
1885 if (unlikely(tsk->signal->group_stop_count) &&
1886 !--tsk->signal->group_stop_count) {
1887 tsk->signal->flags = SIGNAL_STOP_STOPPED;
1888 group_stop = 1;
1889 }
1890out:
Oleg Nesterovd12619b2008-02-08 04:19:12 -08001891 spin_unlock_irq(&tsk->sighand->siglock);
1892
1893 if (unlikely(group_stop)) {
1894 read_lock(&tasklist_lock);
1895 do_notify_parent_cldstop(tsk, CLD_STOPPED);
1896 read_unlock(&tasklist_lock);
1897 }
1898}
1899
Linus Torvalds1da177e2005-04-16 15:20:36 -07001900EXPORT_SYMBOL(recalc_sigpending);
1901EXPORT_SYMBOL_GPL(dequeue_signal);
1902EXPORT_SYMBOL(flush_signals);
1903EXPORT_SYMBOL(force_sig);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001904EXPORT_SYMBOL(send_sig);
1905EXPORT_SYMBOL(send_sig_info);
1906EXPORT_SYMBOL(sigprocmask);
1907EXPORT_SYMBOL(block_all_signals);
1908EXPORT_SYMBOL(unblock_all_signals);
1909
1910
1911/*
1912 * System call entry points.
1913 */
1914
1915asmlinkage long sys_restart_syscall(void)
1916{
1917 struct restart_block *restart = &current_thread_info()->restart_block;
1918 return restart->fn(restart);
1919}
1920
1921long do_no_restart_syscall(struct restart_block *param)
1922{
1923 return -EINTR;
1924}
1925
1926/*
1927 * We don't need to get the kernel lock - this is all local to this
1928 * particular thread.. (and that's good, because this is _heavily_
1929 * used by various programs)
1930 */
1931
1932/*
1933 * This is also useful for kernel threads that want to temporarily
1934 * (or permanently) block certain signals.
1935 *
1936 * NOTE! Unlike the user-mode sys_sigprocmask(), the kernel
1937 * interface happily blocks "unblockable" signals like SIGKILL
1938 * and friends.
1939 */
1940int sigprocmask(int how, sigset_t *set, sigset_t *oldset)
1941{
1942 int error;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001943
1944 spin_lock_irq(&current->sighand->siglock);
Oleg Nesterova26fd332006-03-23 03:00:49 -08001945 if (oldset)
1946 *oldset = current->blocked;
1947
Linus Torvalds1da177e2005-04-16 15:20:36 -07001948 error = 0;
1949 switch (how) {
1950 case SIG_BLOCK:
1951 sigorsets(&current->blocked, &current->blocked, set);
1952 break;
1953 case SIG_UNBLOCK:
1954 signandsets(&current->blocked, &current->blocked, set);
1955 break;
1956 case SIG_SETMASK:
1957 current->blocked = *set;
1958 break;
1959 default:
1960 error = -EINVAL;
1961 }
1962 recalc_sigpending();
1963 spin_unlock_irq(&current->sighand->siglock);
Oleg Nesterova26fd332006-03-23 03:00:49 -08001964
Linus Torvalds1da177e2005-04-16 15:20:36 -07001965 return error;
1966}
1967
1968asmlinkage long
1969sys_rt_sigprocmask(int how, sigset_t __user *set, sigset_t __user *oset, size_t sigsetsize)
1970{
1971 int error = -EINVAL;
1972 sigset_t old_set, new_set;
1973
1974 /* XXX: Don't preclude handling different sized sigset_t's. */
1975 if (sigsetsize != sizeof(sigset_t))
1976 goto out;
1977
1978 if (set) {
1979 error = -EFAULT;
1980 if (copy_from_user(&new_set, set, sizeof(*set)))
1981 goto out;
1982 sigdelsetmask(&new_set, sigmask(SIGKILL)|sigmask(SIGSTOP));
1983
1984 error = sigprocmask(how, &new_set, &old_set);
1985 if (error)
1986 goto out;
1987 if (oset)
1988 goto set_old;
1989 } else if (oset) {
1990 spin_lock_irq(&current->sighand->siglock);
1991 old_set = current->blocked;
1992 spin_unlock_irq(&current->sighand->siglock);
1993
1994 set_old:
1995 error = -EFAULT;
1996 if (copy_to_user(oset, &old_set, sizeof(*oset)))
1997 goto out;
1998 }
1999 error = 0;
2000out:
2001 return error;
2002}
2003
2004long do_sigpending(void __user *set, unsigned long sigsetsize)
2005{
2006 long error = -EINVAL;
2007 sigset_t pending;
2008
2009 if (sigsetsize > sizeof(sigset_t))
2010 goto out;
2011
2012 spin_lock_irq(&current->sighand->siglock);
2013 sigorsets(&pending, &current->pending.signal,
2014 &current->signal->shared_pending.signal);
2015 spin_unlock_irq(&current->sighand->siglock);
2016
2017 /* Outside the lock because only this thread touches it. */
2018 sigandsets(&pending, &current->blocked, &pending);
2019
2020 error = -EFAULT;
2021 if (!copy_to_user(set, &pending, sigsetsize))
2022 error = 0;
2023
2024out:
2025 return error;
2026}
2027
2028asmlinkage long
2029sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize)
2030{
2031 return do_sigpending(set, sigsetsize);
2032}
2033
2034#ifndef HAVE_ARCH_COPY_SIGINFO_TO_USER
2035
2036int copy_siginfo_to_user(siginfo_t __user *to, siginfo_t *from)
2037{
2038 int err;
2039
2040 if (!access_ok (VERIFY_WRITE, to, sizeof(siginfo_t)))
2041 return -EFAULT;
2042 if (from->si_code < 0)
2043 return __copy_to_user(to, from, sizeof(siginfo_t))
2044 ? -EFAULT : 0;
2045 /*
2046 * If you change siginfo_t structure, please be sure
2047 * this code is fixed accordingly.
Davide Libenzifba2afa2007-05-10 22:23:13 -07002048 * Please remember to update the signalfd_copyinfo() function
2049 * inside fs/signalfd.c too, in case siginfo_t changes.
Linus Torvalds1da177e2005-04-16 15:20:36 -07002050 * It should never copy any pad contained in the structure
2051 * to avoid security leaks, but must copy the generic
2052 * 3 ints plus the relevant union member.
2053 */
2054 err = __put_user(from->si_signo, &to->si_signo);
2055 err |= __put_user(from->si_errno, &to->si_errno);
2056 err |= __put_user((short)from->si_code, &to->si_code);
2057 switch (from->si_code & __SI_MASK) {
2058 case __SI_KILL:
2059 err |= __put_user(from->si_pid, &to->si_pid);
2060 err |= __put_user(from->si_uid, &to->si_uid);
2061 break;
2062 case __SI_TIMER:
2063 err |= __put_user(from->si_tid, &to->si_tid);
2064 err |= __put_user(from->si_overrun, &to->si_overrun);
2065 err |= __put_user(from->si_ptr, &to->si_ptr);
2066 break;
2067 case __SI_POLL:
2068 err |= __put_user(from->si_band, &to->si_band);
2069 err |= __put_user(from->si_fd, &to->si_fd);
2070 break;
2071 case __SI_FAULT:
2072 err |= __put_user(from->si_addr, &to->si_addr);
2073#ifdef __ARCH_SI_TRAPNO
2074 err |= __put_user(from->si_trapno, &to->si_trapno);
2075#endif
2076 break;
2077 case __SI_CHLD:
2078 err |= __put_user(from->si_pid, &to->si_pid);
2079 err |= __put_user(from->si_uid, &to->si_uid);
2080 err |= __put_user(from->si_status, &to->si_status);
2081 err |= __put_user(from->si_utime, &to->si_utime);
2082 err |= __put_user(from->si_stime, &to->si_stime);
2083 break;
2084 case __SI_RT: /* This is not generated by the kernel as of now. */
2085 case __SI_MESGQ: /* But this is */
2086 err |= __put_user(from->si_pid, &to->si_pid);
2087 err |= __put_user(from->si_uid, &to->si_uid);
2088 err |= __put_user(from->si_ptr, &to->si_ptr);
2089 break;
2090 default: /* this is just in case for now ... */
2091 err |= __put_user(from->si_pid, &to->si_pid);
2092 err |= __put_user(from->si_uid, &to->si_uid);
2093 break;
2094 }
2095 return err;
2096}
2097
2098#endif
2099
2100asmlinkage long
2101sys_rt_sigtimedwait(const sigset_t __user *uthese,
2102 siginfo_t __user *uinfo,
2103 const struct timespec __user *uts,
2104 size_t sigsetsize)
2105{
2106 int ret, sig;
2107 sigset_t these;
2108 struct timespec ts;
2109 siginfo_t info;
2110 long timeout = 0;
2111
2112 /* XXX: Don't preclude handling different sized sigset_t's. */
2113 if (sigsetsize != sizeof(sigset_t))
2114 return -EINVAL;
2115
2116 if (copy_from_user(&these, uthese, sizeof(these)))
2117 return -EFAULT;
2118
2119 /*
2120 * Invert the set of allowed signals to get those we
2121 * want to block.
2122 */
2123 sigdelsetmask(&these, sigmask(SIGKILL)|sigmask(SIGSTOP));
2124 signotset(&these);
2125
2126 if (uts) {
2127 if (copy_from_user(&ts, uts, sizeof(ts)))
2128 return -EFAULT;
2129 if (ts.tv_nsec >= 1000000000L || ts.tv_nsec < 0
2130 || ts.tv_sec < 0)
2131 return -EINVAL;
2132 }
2133
2134 spin_lock_irq(&current->sighand->siglock);
2135 sig = dequeue_signal(current, &these, &info);
2136 if (!sig) {
2137 timeout = MAX_SCHEDULE_TIMEOUT;
2138 if (uts)
2139 timeout = (timespec_to_jiffies(&ts)
2140 + (ts.tv_sec || ts.tv_nsec));
2141
2142 if (timeout) {
2143 /* None ready -- temporarily unblock those we're
2144 * interested while we are sleeping in so that we'll
2145 * be awakened when they arrive. */
2146 current->real_blocked = current->blocked;
2147 sigandsets(&current->blocked, &current->blocked, &these);
2148 recalc_sigpending();
2149 spin_unlock_irq(&current->sighand->siglock);
2150
Nishanth Aravamudan75bcc8c2005-09-10 00:27:24 -07002151 timeout = schedule_timeout_interruptible(timeout);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002152
Linus Torvalds1da177e2005-04-16 15:20:36 -07002153 spin_lock_irq(&current->sighand->siglock);
2154 sig = dequeue_signal(current, &these, &info);
2155 current->blocked = current->real_blocked;
2156 siginitset(&current->real_blocked, 0);
2157 recalc_sigpending();
2158 }
2159 }
2160 spin_unlock_irq(&current->sighand->siglock);
2161
2162 if (sig) {
2163 ret = sig;
2164 if (uinfo) {
2165 if (copy_siginfo_to_user(uinfo, &info))
2166 ret = -EFAULT;
2167 }
2168 } else {
2169 ret = -EAGAIN;
2170 if (timeout)
2171 ret = -EINTR;
2172 }
2173
2174 return ret;
2175}
2176
2177asmlinkage long
Gustavo Fernando Padovanbc64efd2008-07-25 01:47:33 -07002178sys_kill(pid_t pid, int sig)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002179{
2180 struct siginfo info;
2181
2182 info.si_signo = sig;
2183 info.si_errno = 0;
2184 info.si_code = SI_USER;
Pavel Emelyanovb4888932007-10-18 23:40:14 -07002185 info.si_pid = task_tgid_vnr(current);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002186 info.si_uid = current->uid;
2187
2188 return kill_something_info(sig, &info, pid);
2189}
2190
Gustavo Fernando Padovanbc64efd2008-07-25 01:47:33 -07002191static int do_tkill(pid_t tgid, pid_t pid, int sig)
Vadim Lobanov6dd69f12005-10-30 15:02:18 -08002192{
2193 int error;
2194 struct siginfo info;
2195 struct task_struct *p;
Oleg Nesterov3547ff32008-04-30 00:52:51 -07002196 unsigned long flags;
Vadim Lobanov6dd69f12005-10-30 15:02:18 -08002197
2198 error = -ESRCH;
2199 info.si_signo = sig;
2200 info.si_errno = 0;
2201 info.si_code = SI_TKILL;
Pavel Emelyanovb4888932007-10-18 23:40:14 -07002202 info.si_pid = task_tgid_vnr(current);
Vadim Lobanov6dd69f12005-10-30 15:02:18 -08002203 info.si_uid = current->uid;
2204
Oleg Nesterov3547ff32008-04-30 00:52:51 -07002205 rcu_read_lock();
Pavel Emelyanov228ebcb2007-10-18 23:40:16 -07002206 p = find_task_by_vpid(pid);
Pavel Emelyanovb4888932007-10-18 23:40:14 -07002207 if (p && (tgid <= 0 || task_tgid_vnr(p) == tgid)) {
Vadim Lobanov6dd69f12005-10-30 15:02:18 -08002208 error = check_kill_permission(sig, &info, p);
2209 /*
2210 * The null signal is a permissions and process existence
2211 * probe. No signal is actually delivered.
Oleg Nesterov3547ff32008-04-30 00:52:51 -07002212 *
2213 * If lock_task_sighand() fails we pretend the task dies
2214 * after receiving the signal. The window is tiny, and the
2215 * signal is private anyway.
Vadim Lobanov6dd69f12005-10-30 15:02:18 -08002216 */
Oleg Nesterov3547ff32008-04-30 00:52:51 -07002217 if (!error && sig && lock_task_sighand(p, &flags)) {
Vadim Lobanov6dd69f12005-10-30 15:02:18 -08002218 error = specific_send_sig_info(sig, &info, p);
Oleg Nesterov3547ff32008-04-30 00:52:51 -07002219 unlock_task_sighand(p, &flags);
Vadim Lobanov6dd69f12005-10-30 15:02:18 -08002220 }
2221 }
Oleg Nesterov3547ff32008-04-30 00:52:51 -07002222 rcu_read_unlock();
Vadim Lobanov6dd69f12005-10-30 15:02:18 -08002223
2224 return error;
2225}
2226
Linus Torvalds1da177e2005-04-16 15:20:36 -07002227/**
2228 * sys_tgkill - send signal to one specific thread
2229 * @tgid: the thread group ID of the thread
2230 * @pid: the PID of the thread
2231 * @sig: signal to be sent
2232 *
Robert P. J. Day72fd4a32007-02-10 01:45:59 -08002233 * This syscall also checks the @tgid and returns -ESRCH even if the PID
Linus Torvalds1da177e2005-04-16 15:20:36 -07002234 * exists but it's not belonging to the target process anymore. This
2235 * method solves the problem of threads exiting and PIDs getting reused.
2236 */
Gustavo Fernando Padovanbc64efd2008-07-25 01:47:33 -07002237asmlinkage long sys_tgkill(pid_t tgid, pid_t pid, int sig)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002238{
Linus Torvalds1da177e2005-04-16 15:20:36 -07002239 /* This is only valid for single tasks */
2240 if (pid <= 0 || tgid <= 0)
2241 return -EINVAL;
2242
Vadim Lobanov6dd69f12005-10-30 15:02:18 -08002243 return do_tkill(tgid, pid, sig);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002244}
2245
2246/*
2247 * Send a signal to only one task, even if it's a CLONE_THREAD task.
2248 */
2249asmlinkage long
Gustavo Fernando Padovanbc64efd2008-07-25 01:47:33 -07002250sys_tkill(pid_t pid, int sig)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002251{
Linus Torvalds1da177e2005-04-16 15:20:36 -07002252 /* This is only valid for single tasks */
2253 if (pid <= 0)
2254 return -EINVAL;
2255
Vadim Lobanov6dd69f12005-10-30 15:02:18 -08002256 return do_tkill(0, pid, sig);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002257}
2258
2259asmlinkage long
Gustavo Fernando Padovanbc64efd2008-07-25 01:47:33 -07002260sys_rt_sigqueueinfo(pid_t pid, int sig, siginfo_t __user *uinfo)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002261{
2262 siginfo_t info;
2263
2264 if (copy_from_user(&info, uinfo, sizeof(siginfo_t)))
2265 return -EFAULT;
2266
2267 /* Not even root can pretend to send signals from the kernel.
2268 Nor can they impersonate a kill(), which adds source info. */
2269 if (info.si_code >= 0)
2270 return -EPERM;
2271 info.si_signo = sig;
2272
2273 /* POSIX.1b doesn't mention process groups. */
2274 return kill_proc_info(sig, &info, pid);
2275}
2276
Oleg Nesterov88531f72006-03-28 16:11:24 -08002277int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002278{
Pavel Emelyanov93585ee2008-04-30 00:52:39 -07002279 struct task_struct *t = current;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002280 struct k_sigaction *k;
George Anzinger71fabd52006-01-08 01:02:48 -08002281 sigset_t mask;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002282
Jesper Juhl7ed20e12005-05-01 08:59:14 -07002283 if (!valid_signal(sig) || sig < 1 || (act && sig_kernel_only(sig)))
Linus Torvalds1da177e2005-04-16 15:20:36 -07002284 return -EINVAL;
2285
Pavel Emelyanov93585ee2008-04-30 00:52:39 -07002286 k = &t->sighand->action[sig-1];
Linus Torvalds1da177e2005-04-16 15:20:36 -07002287
2288 spin_lock_irq(&current->sighand->siglock);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002289 if (oact)
2290 *oact = *k;
2291
2292 if (act) {
Oleg Nesterov9ac95f22006-02-09 22:41:50 +03002293 sigdelsetmask(&act->sa.sa_mask,
2294 sigmask(SIGKILL) | sigmask(SIGSTOP));
Oleg Nesterov88531f72006-03-28 16:11:24 -08002295 *k = *act;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002296 /*
2297 * POSIX 3.3.1.3:
2298 * "Setting a signal action to SIG_IGN for a signal that is
2299 * pending shall cause the pending signal to be discarded,
2300 * whether or not it is blocked."
2301 *
2302 * "Setting a signal action to SIG_DFL for a signal that is
2303 * pending and whose default action is to ignore the signal
2304 * (for example, SIGCHLD), shall cause the pending signal to
2305 * be discarded, whether or not it is blocked"
2306 */
Roland McGrath35de2542008-07-25 19:45:51 -07002307 if (sig_handler_ignored(sig_handler(t, sig), sig)) {
George Anzinger71fabd52006-01-08 01:02:48 -08002308 sigemptyset(&mask);
2309 sigaddset(&mask, sig);
2310 rm_from_queue_full(&mask, &t->signal->shared_pending);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002311 do {
George Anzinger71fabd52006-01-08 01:02:48 -08002312 rm_from_queue_full(&mask, &t->pending);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002313 t = next_thread(t);
2314 } while (t != current);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002315 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07002316 }
2317
2318 spin_unlock_irq(&current->sighand->siglock);
2319 return 0;
2320}
2321
2322int
2323do_sigaltstack (const stack_t __user *uss, stack_t __user *uoss, unsigned long sp)
2324{
2325 stack_t oss;
2326 int error;
2327
2328 if (uoss) {
2329 oss.ss_sp = (void __user *) current->sas_ss_sp;
2330 oss.ss_size = current->sas_ss_size;
2331 oss.ss_flags = sas_ss_flags(sp);
2332 }
2333
2334 if (uss) {
2335 void __user *ss_sp;
2336 size_t ss_size;
2337 int ss_flags;
2338
2339 error = -EFAULT;
2340 if (!access_ok(VERIFY_READ, uss, sizeof(*uss))
2341 || __get_user(ss_sp, &uss->ss_sp)
2342 || __get_user(ss_flags, &uss->ss_flags)
2343 || __get_user(ss_size, &uss->ss_size))
2344 goto out;
2345
2346 error = -EPERM;
2347 if (on_sig_stack(sp))
2348 goto out;
2349
2350 error = -EINVAL;
2351 /*
2352 *
2353 * Note - this code used to test ss_flags incorrectly
2354 * old code may have been written using ss_flags==0
2355 * to mean ss_flags==SS_ONSTACK (as this was the only
2356 * way that worked) - this fix preserves that older
2357 * mechanism
2358 */
2359 if (ss_flags != SS_DISABLE && ss_flags != SS_ONSTACK && ss_flags != 0)
2360 goto out;
2361
2362 if (ss_flags == SS_DISABLE) {
2363 ss_size = 0;
2364 ss_sp = NULL;
2365 } else {
2366 error = -ENOMEM;
2367 if (ss_size < MINSIGSTKSZ)
2368 goto out;
2369 }
2370
2371 current->sas_ss_sp = (unsigned long) ss_sp;
2372 current->sas_ss_size = ss_size;
2373 }
2374
2375 if (uoss) {
2376 error = -EFAULT;
2377 if (copy_to_user(uoss, &oss, sizeof(oss)))
2378 goto out;
2379 }
2380
2381 error = 0;
2382out:
2383 return error;
2384}
2385
2386#ifdef __ARCH_WANT_SYS_SIGPENDING
2387
2388asmlinkage long
2389sys_sigpending(old_sigset_t __user *set)
2390{
2391 return do_sigpending(set, sizeof(*set));
2392}
2393
2394#endif
2395
2396#ifdef __ARCH_WANT_SYS_SIGPROCMASK
2397/* Some platforms have their own version with special arguments others
2398 support only sys_rt_sigprocmask. */
2399
2400asmlinkage long
2401sys_sigprocmask(int how, old_sigset_t __user *set, old_sigset_t __user *oset)
2402{
2403 int error;
2404 old_sigset_t old_set, new_set;
2405
2406 if (set) {
2407 error = -EFAULT;
2408 if (copy_from_user(&new_set, set, sizeof(*set)))
2409 goto out;
2410 new_set &= ~(sigmask(SIGKILL) | sigmask(SIGSTOP));
2411
2412 spin_lock_irq(&current->sighand->siglock);
2413 old_set = current->blocked.sig[0];
2414
2415 error = 0;
2416 switch (how) {
2417 default:
2418 error = -EINVAL;
2419 break;
2420 case SIG_BLOCK:
2421 sigaddsetmask(&current->blocked, new_set);
2422 break;
2423 case SIG_UNBLOCK:
2424 sigdelsetmask(&current->blocked, new_set);
2425 break;
2426 case SIG_SETMASK:
2427 current->blocked.sig[0] = new_set;
2428 break;
2429 }
2430
2431 recalc_sigpending();
2432 spin_unlock_irq(&current->sighand->siglock);
2433 if (error)
2434 goto out;
2435 if (oset)
2436 goto set_old;
2437 } else if (oset) {
2438 old_set = current->blocked.sig[0];
2439 set_old:
2440 error = -EFAULT;
2441 if (copy_to_user(oset, &old_set, sizeof(*oset)))
2442 goto out;
2443 }
2444 error = 0;
2445out:
2446 return error;
2447}
2448#endif /* __ARCH_WANT_SYS_SIGPROCMASK */
2449
2450#ifdef __ARCH_WANT_SYS_RT_SIGACTION
2451asmlinkage long
2452sys_rt_sigaction(int sig,
2453 const struct sigaction __user *act,
2454 struct sigaction __user *oact,
2455 size_t sigsetsize)
2456{
2457 struct k_sigaction new_sa, old_sa;
2458 int ret = -EINVAL;
2459
2460 /* XXX: Don't preclude handling different sized sigset_t's. */
2461 if (sigsetsize != sizeof(sigset_t))
2462 goto out;
2463
2464 if (act) {
2465 if (copy_from_user(&new_sa.sa, act, sizeof(new_sa.sa)))
2466 return -EFAULT;
2467 }
2468
2469 ret = do_sigaction(sig, act ? &new_sa : NULL, oact ? &old_sa : NULL);
2470
2471 if (!ret && oact) {
2472 if (copy_to_user(oact, &old_sa.sa, sizeof(old_sa.sa)))
2473 return -EFAULT;
2474 }
2475out:
2476 return ret;
2477}
2478#endif /* __ARCH_WANT_SYS_RT_SIGACTION */
2479
2480#ifdef __ARCH_WANT_SYS_SGETMASK
2481
2482/*
2483 * For backwards compatibility. Functionality superseded by sigprocmask.
2484 */
2485asmlinkage long
2486sys_sgetmask(void)
2487{
2488 /* SMP safe */
2489 return current->blocked.sig[0];
2490}
2491
2492asmlinkage long
2493sys_ssetmask(int newmask)
2494{
2495 int old;
2496
2497 spin_lock_irq(&current->sighand->siglock);
2498 old = current->blocked.sig[0];
2499
2500 siginitset(&current->blocked, newmask & ~(sigmask(SIGKILL)|
2501 sigmask(SIGSTOP)));
2502 recalc_sigpending();
2503 spin_unlock_irq(&current->sighand->siglock);
2504
2505 return old;
2506}
2507#endif /* __ARCH_WANT_SGETMASK */
2508
2509#ifdef __ARCH_WANT_SYS_SIGNAL
2510/*
2511 * For backwards compatibility. Functionality superseded by sigaction.
2512 */
2513asmlinkage unsigned long
2514sys_signal(int sig, __sighandler_t handler)
2515{
2516 struct k_sigaction new_sa, old_sa;
2517 int ret;
2518
2519 new_sa.sa.sa_handler = handler;
2520 new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK;
Oleg Nesterovc70d3d702006-02-09 22:41:41 +03002521 sigemptyset(&new_sa.sa.sa_mask);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002522
2523 ret = do_sigaction(sig, &new_sa, &old_sa);
2524
2525 return ret ? ret : (unsigned long)old_sa.sa.sa_handler;
2526}
2527#endif /* __ARCH_WANT_SYS_SIGNAL */
2528
2529#ifdef __ARCH_WANT_SYS_PAUSE
2530
2531asmlinkage long
2532sys_pause(void)
2533{
2534 current->state = TASK_INTERRUPTIBLE;
2535 schedule();
2536 return -ERESTARTNOHAND;
2537}
2538
2539#endif
2540
David Woodhouse150256d2006-01-18 17:43:57 -08002541#ifdef __ARCH_WANT_SYS_RT_SIGSUSPEND
2542asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize)
2543{
2544 sigset_t newset;
2545
2546 /* XXX: Don't preclude handling different sized sigset_t's. */
2547 if (sigsetsize != sizeof(sigset_t))
2548 return -EINVAL;
2549
2550 if (copy_from_user(&newset, unewset, sizeof(newset)))
2551 return -EFAULT;
2552 sigdelsetmask(&newset, sigmask(SIGKILL)|sigmask(SIGSTOP));
2553
2554 spin_lock_irq(&current->sighand->siglock);
2555 current->saved_sigmask = current->blocked;
2556 current->blocked = newset;
2557 recalc_sigpending();
2558 spin_unlock_irq(&current->sighand->siglock);
2559
2560 current->state = TASK_INTERRUPTIBLE;
2561 schedule();
Roland McGrath4e4c22c2008-04-30 00:53:06 -07002562 set_restore_sigmask();
David Woodhouse150256d2006-01-18 17:43:57 -08002563 return -ERESTARTNOHAND;
2564}
2565#endif /* __ARCH_WANT_SYS_RT_SIGSUSPEND */
2566
David Howellsf269fdd2006-09-27 01:50:23 -07002567__attribute__((weak)) const char *arch_vma_name(struct vm_area_struct *vma)
2568{
2569 return NULL;
2570}
2571
Linus Torvalds1da177e2005-04-16 15:20:36 -07002572void __init signals_init(void)
2573{
Christoph Lameter0a31bd52007-05-06 14:49:57 -07002574 sigqueue_cachep = KMEM_CACHE(sigqueue, SLAB_PANIC);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002575}