user.c: #ifdef ->mq_bytes
[linux-2.6] / kernel / signal.c
1 /*
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
13 #include <linux/slab.h>
14 #include <linux/module.h>
15 #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>
23 #include <linux/signal.h>
24 #include <linux/signalfd.h>
25 #include <linux/capability.h>
26 #include <linux/freezer.h>
27 #include <linux/pid_namespace.h>
28 #include <linux/nsproxy.h>
29
30 #include <asm/param.h>
31 #include <asm/uaccess.h>
32 #include <asm/unistd.h>
33 #include <asm/siginfo.h>
34 #include "audit.h"      /* audit_signal_info() */
35
36 /*
37  * SLAB caches for signal bits.
38  */
39
40 static struct kmem_cache *sigqueue_cachep;
41
42
43 static int sig_ignored(struct task_struct *t, int sig)
44 {
45         void __user * handler;
46
47         /*
48          * Tracers always want to know about signals..
49          */
50         if (t->ptrace & PT_PTRACED)
51                 return 0;
52
53         /*
54          * Blocked signals are never ignored, since the
55          * signal handler may change by the time it is
56          * unblocked.
57          */
58         if (sigismember(&t->blocked, sig))
59                 return 0;
60
61         /* Is it explicitly or implicitly ignored? */
62         handler = t->sighand->action[sig-1].sa.sa_handler;
63         return   handler == SIG_IGN ||
64                 (handler == SIG_DFL && sig_kernel_ignore(sig));
65 }
66
67 /*
68  * Re-calculate pending state from the set of locally pending
69  * signals, globally pending signals, and blocked signals.
70  */
71 static inline int has_pending_signals(sigset_t *signal, sigset_t *blocked)
72 {
73         unsigned long ready;
74         long i;
75
76         switch (_NSIG_WORDS) {
77         default:
78                 for (i = _NSIG_WORDS, ready = 0; --i >= 0 ;)
79                         ready |= signal->sig[i] &~ blocked->sig[i];
80                 break;
81
82         case 4: ready  = signal->sig[3] &~ blocked->sig[3];
83                 ready |= signal->sig[2] &~ blocked->sig[2];
84                 ready |= signal->sig[1] &~ blocked->sig[1];
85                 ready |= signal->sig[0] &~ blocked->sig[0];
86                 break;
87
88         case 2: ready  = signal->sig[1] &~ blocked->sig[1];
89                 ready |= signal->sig[0] &~ blocked->sig[0];
90                 break;
91
92         case 1: ready  = signal->sig[0] &~ blocked->sig[0];
93         }
94         return ready != 0;
95 }
96
97 #define PENDING(p,b) has_pending_signals(&(p)->signal, (b))
98
99 static int recalc_sigpending_tsk(struct task_struct *t)
100 {
101         if (t->signal->group_stop_count > 0 ||
102             (freezing(t)) ||
103             PENDING(&t->pending, &t->blocked) ||
104             PENDING(&t->signal->shared_pending, &t->blocked)) {
105                 set_tsk_thread_flag(t, TIF_SIGPENDING);
106                 return 1;
107         }
108         /*
109          * We must never clear the flag in another thread, or in current
110          * when it's possible the current syscall is returning -ERESTART*.
111          * So we don't clear it here, and only callers who know they should do.
112          */
113         return 0;
114 }
115
116 /*
117  * After recalculating TIF_SIGPENDING, we need to make sure the task wakes up.
118  * This is superfluous when called on current, the wakeup is a harmless no-op.
119  */
120 void recalc_sigpending_and_wake(struct task_struct *t)
121 {
122         if (recalc_sigpending_tsk(t))
123                 signal_wake_up(t, 0);
124 }
125
126 void recalc_sigpending(void)
127 {
128         if (!recalc_sigpending_tsk(current))
129                 clear_thread_flag(TIF_SIGPENDING);
130
131 }
132
133 /* Given the mask, find the first available signal that should be serviced. */
134
135 int next_signal(struct sigpending *pending, sigset_t *mask)
136 {
137         unsigned long i, *s, *m, x;
138         int sig = 0;
139         
140         s = pending->signal.sig;
141         m = mask->sig;
142         switch (_NSIG_WORDS) {
143         default:
144                 for (i = 0; i < _NSIG_WORDS; ++i, ++s, ++m)
145                         if ((x = *s &~ *m) != 0) {
146                                 sig = ffz(~x) + i*_NSIG_BPW + 1;
147                                 break;
148                         }
149                 break;
150
151         case 2: if ((x = s[0] &~ m[0]) != 0)
152                         sig = 1;
153                 else if ((x = s[1] &~ m[1]) != 0)
154                         sig = _NSIG_BPW + 1;
155                 else
156                         break;
157                 sig += ffz(~x);
158                 break;
159
160         case 1: if ((x = *s &~ *m) != 0)
161                         sig = ffz(~x) + 1;
162                 break;
163         }
164         
165         return sig;
166 }
167
168 static struct sigqueue *__sigqueue_alloc(struct task_struct *t, gfp_t flags,
169                                          int override_rlimit)
170 {
171         struct sigqueue *q = NULL;
172         struct user_struct *user;
173
174         /*
175          * In order to avoid problems with "switch_user()", we want to make
176          * sure that the compiler doesn't re-load "t->user"
177          */
178         user = t->user;
179         barrier();
180         atomic_inc(&user->sigpending);
181         if (override_rlimit ||
182             atomic_read(&user->sigpending) <=
183                         t->signal->rlim[RLIMIT_SIGPENDING].rlim_cur)
184                 q = kmem_cache_alloc(sigqueue_cachep, flags);
185         if (unlikely(q == NULL)) {
186                 atomic_dec(&user->sigpending);
187         } else {
188                 INIT_LIST_HEAD(&q->list);
189                 q->flags = 0;
190                 q->user = get_uid(user);
191         }
192         return(q);
193 }
194
195 static void __sigqueue_free(struct sigqueue *q)
196 {
197         if (q->flags & SIGQUEUE_PREALLOC)
198                 return;
199         atomic_dec(&q->user->sigpending);
200         free_uid(q->user);
201         kmem_cache_free(sigqueue_cachep, q);
202 }
203
204 void flush_sigqueue(struct sigpending *queue)
205 {
206         struct sigqueue *q;
207
208         sigemptyset(&queue->signal);
209         while (!list_empty(&queue->list)) {
210                 q = list_entry(queue->list.next, struct sigqueue , list);
211                 list_del_init(&q->list);
212                 __sigqueue_free(q);
213         }
214 }
215
216 /*
217  * Flush all pending signals for a task.
218  */
219 void flush_signals(struct task_struct *t)
220 {
221         unsigned long flags;
222
223         spin_lock_irqsave(&t->sighand->siglock, flags);
224         clear_tsk_thread_flag(t,TIF_SIGPENDING);
225         flush_sigqueue(&t->pending);
226         flush_sigqueue(&t->signal->shared_pending);
227         spin_unlock_irqrestore(&t->sighand->siglock, flags);
228 }
229
230 void ignore_signals(struct task_struct *t)
231 {
232         int i;
233
234         for (i = 0; i < _NSIG; ++i)
235                 t->sighand->action[i].sa.sa_handler = SIG_IGN;
236
237         flush_signals(t);
238 }
239
240 /*
241  * Flush all handlers for a task.
242  */
243
244 void
245 flush_signal_handlers(struct task_struct *t, int force_default)
246 {
247         int i;
248         struct k_sigaction *ka = &t->sighand->action[0];
249         for (i = _NSIG ; i != 0 ; i--) {
250                 if (force_default || ka->sa.sa_handler != SIG_IGN)
251                         ka->sa.sa_handler = SIG_DFL;
252                 ka->sa.sa_flags = 0;
253                 sigemptyset(&ka->sa.sa_mask);
254                 ka++;
255         }
256 }
257
258 int unhandled_signal(struct task_struct *tsk, int sig)
259 {
260         if (is_init(tsk))
261                 return 1;
262         if (tsk->ptrace & PT_PTRACED)
263                 return 0;
264         return (tsk->sighand->action[sig-1].sa.sa_handler == SIG_IGN) ||
265                 (tsk->sighand->action[sig-1].sa.sa_handler == SIG_DFL);
266 }
267
268
269 /* Notify the system that a driver wants to block all signals for this
270  * process, and wants to be notified if any signals at all were to be
271  * sent/acted upon.  If the notifier routine returns non-zero, then the
272  * signal will be acted upon after all.  If the notifier routine returns 0,
273  * then then signal will be blocked.  Only one block per process is
274  * allowed.  priv is a pointer to private data that the notifier routine
275  * can use to determine if the signal should be blocked or not.  */
276
277 void
278 block_all_signals(int (*notifier)(void *priv), void *priv, sigset_t *mask)
279 {
280         unsigned long flags;
281
282         spin_lock_irqsave(&current->sighand->siglock, flags);
283         current->notifier_mask = mask;
284         current->notifier_data = priv;
285         current->notifier = notifier;
286         spin_unlock_irqrestore(&current->sighand->siglock, flags);
287 }
288
289 /* Notify the system that blocking has ended. */
290
291 void
292 unblock_all_signals(void)
293 {
294         unsigned long flags;
295
296         spin_lock_irqsave(&current->sighand->siglock, flags);
297         current->notifier = NULL;
298         current->notifier_data = NULL;
299         recalc_sigpending();
300         spin_unlock_irqrestore(&current->sighand->siglock, flags);
301 }
302
303 static int collect_signal(int sig, struct sigpending *list, siginfo_t *info)
304 {
305         struct sigqueue *q, *first = NULL;
306         int still_pending = 0;
307
308         if (unlikely(!sigismember(&list->signal, sig)))
309                 return 0;
310
311         /*
312          * Collect the siginfo appropriate to this signal.  Check if
313          * there is another siginfo for the same signal.
314         */
315         list_for_each_entry(q, &list->list, list) {
316                 if (q->info.si_signo == sig) {
317                         if (first) {
318                                 still_pending = 1;
319                                 break;
320                         }
321                         first = q;
322                 }
323         }
324         if (first) {
325                 list_del_init(&first->list);
326                 copy_siginfo(info, &first->info);
327                 __sigqueue_free(first);
328                 if (!still_pending)
329                         sigdelset(&list->signal, sig);
330         } else {
331
332                 /* Ok, it wasn't in the queue.  This must be
333                    a fast-pathed signal or we must have been
334                    out of queue space.  So zero out the info.
335                  */
336                 sigdelset(&list->signal, sig);
337                 info->si_signo = sig;
338                 info->si_errno = 0;
339                 info->si_code = 0;
340                 info->si_pid = 0;
341                 info->si_uid = 0;
342         }
343         return 1;
344 }
345
346 static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
347                         siginfo_t *info)
348 {
349         int sig = next_signal(pending, mask);
350
351         if (sig) {
352                 if (current->notifier) {
353                         if (sigismember(current->notifier_mask, sig)) {
354                                 if (!(current->notifier)(current->notifier_data)) {
355                                         clear_thread_flag(TIF_SIGPENDING);
356                                         return 0;
357                                 }
358                         }
359                 }
360
361                 if (!collect_signal(sig, pending, info))
362                         sig = 0;
363         }
364
365         return sig;
366 }
367
368 /*
369  * Dequeue a signal and return the element to the caller, which is 
370  * expected to free it.
371  *
372  * All callers have to hold the siglock.
373  */
374 int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
375 {
376         int signr = 0;
377
378         /* We only dequeue private signals from ourselves, we don't let
379          * signalfd steal them
380          */
381         signr = __dequeue_signal(&tsk->pending, mask, info);
382         if (!signr) {
383                 signr = __dequeue_signal(&tsk->signal->shared_pending,
384                                          mask, info);
385                 /*
386                  * itimer signal ?
387                  *
388                  * itimers are process shared and we restart periodic
389                  * itimers in the signal delivery path to prevent DoS
390                  * attacks in the high resolution timer case. This is
391                  * compliant with the old way of self restarting
392                  * itimers, as the SIGALRM is a legacy signal and only
393                  * queued once. Changing the restart behaviour to
394                  * restart the timer in the signal dequeue path is
395                  * reducing the timer noise on heavy loaded !highres
396                  * systems too.
397                  */
398                 if (unlikely(signr == SIGALRM)) {
399                         struct hrtimer *tmr = &tsk->signal->real_timer;
400
401                         if (!hrtimer_is_queued(tmr) &&
402                             tsk->signal->it_real_incr.tv64 != 0) {
403                                 hrtimer_forward(tmr, tmr->base->get_time(),
404                                                 tsk->signal->it_real_incr);
405                                 hrtimer_restart(tmr);
406                         }
407                 }
408         }
409         recalc_sigpending();
410         if (signr && unlikely(sig_kernel_stop(signr))) {
411                 /*
412                  * Set a marker that we have dequeued a stop signal.  Our
413                  * caller might release the siglock and then the pending
414                  * stop signal it is about to process is no longer in the
415                  * pending bitmasks, but must still be cleared by a SIGCONT
416                  * (and overruled by a SIGKILL).  So those cases clear this
417                  * shared flag after we've set it.  Note that this flag may
418                  * remain set after the signal we return is ignored or
419                  * handled.  That doesn't matter because its only purpose
420                  * is to alert stop-signal processing code when another
421                  * processor has come along and cleared the flag.
422                  */
423                 if (!(tsk->signal->flags & SIGNAL_GROUP_EXIT))
424                         tsk->signal->flags |= SIGNAL_STOP_DEQUEUED;
425         }
426         if (signr &&
427              ((info->si_code & __SI_MASK) == __SI_TIMER) &&
428              info->si_sys_private){
429                 /*
430                  * Release the siglock to ensure proper locking order
431                  * of timer locks outside of siglocks.  Note, we leave
432                  * irqs disabled here, since the posix-timers code is
433                  * about to disable them again anyway.
434                  */
435                 spin_unlock(&tsk->sighand->siglock);
436                 do_schedule_next_timer(info);
437                 spin_lock(&tsk->sighand->siglock);
438         }
439         return signr;
440 }
441
442 /*
443  * Tell a process that it has a new active signal..
444  *
445  * NOTE! we rely on the previous spin_lock to
446  * lock interrupts for us! We can only be called with
447  * "siglock" held, and the local interrupt must
448  * have been disabled when that got acquired!
449  *
450  * No need to set need_resched since signal event passing
451  * goes through ->blocked
452  */
453 void signal_wake_up(struct task_struct *t, int resume)
454 {
455         unsigned int mask;
456
457         set_tsk_thread_flag(t, TIF_SIGPENDING);
458
459         /*
460          * For SIGKILL, we want to wake it up in the stopped/traced case.
461          * We don't check t->state here because there is a race with it
462          * executing another processor and just now entering stopped state.
463          * By using wake_up_state, we ensure the process will wake up and
464          * handle its death signal.
465          */
466         mask = TASK_INTERRUPTIBLE;
467         if (resume)
468                 mask |= TASK_STOPPED | TASK_TRACED;
469         if (!wake_up_state(t, mask))
470                 kick_process(t);
471 }
472
473 /*
474  * Remove signals in mask from the pending set and queue.
475  * Returns 1 if any signals were found.
476  *
477  * All callers must be holding the siglock.
478  *
479  * This version takes a sigset mask and looks at all signals,
480  * not just those in the first mask word.
481  */
482 static int rm_from_queue_full(sigset_t *mask, struct sigpending *s)
483 {
484         struct sigqueue *q, *n;
485         sigset_t m;
486
487         sigandsets(&m, mask, &s->signal);
488         if (sigisemptyset(&m))
489                 return 0;
490
491         signandsets(&s->signal, &s->signal, mask);
492         list_for_each_entry_safe(q, n, &s->list, list) {
493                 if (sigismember(mask, q->info.si_signo)) {
494                         list_del_init(&q->list);
495                         __sigqueue_free(q);
496                 }
497         }
498         return 1;
499 }
500 /*
501  * Remove signals in mask from the pending set and queue.
502  * Returns 1 if any signals were found.
503  *
504  * All callers must be holding the siglock.
505  */
506 static int rm_from_queue(unsigned long mask, struct sigpending *s)
507 {
508         struct sigqueue *q, *n;
509
510         if (!sigtestsetmask(&s->signal, mask))
511                 return 0;
512
513         sigdelsetmask(&s->signal, mask);
514         list_for_each_entry_safe(q, n, &s->list, list) {
515                 if (q->info.si_signo < SIGRTMIN &&
516                     (mask & sigmask(q->info.si_signo))) {
517                         list_del_init(&q->list);
518                         __sigqueue_free(q);
519                 }
520         }
521         return 1;
522 }
523
524 /*
525  * Bad permissions for sending the signal
526  */
527 static int check_kill_permission(int sig, struct siginfo *info,
528                                  struct task_struct *t)
529 {
530         int error = -EINVAL;
531         if (!valid_signal(sig))
532                 return error;
533
534         if (info == SEND_SIG_NOINFO || (!is_si_special(info) && SI_FROMUSER(info))) {
535                 error = audit_signal_info(sig, t); /* Let audit system see the signal */
536                 if (error)
537                         return error;
538                 error = -EPERM;
539                 if (((sig != SIGCONT) ||
540                         (process_session(current) != process_session(t)))
541                     && (current->euid ^ t->suid) && (current->euid ^ t->uid)
542                     && (current->uid ^ t->suid) && (current->uid ^ t->uid)
543                     && !capable(CAP_KILL))
544                 return error;
545         }
546
547         return security_task_kill(t, info, sig, 0);
548 }
549
550 /* forward decl */
551 static void do_notify_parent_cldstop(struct task_struct *tsk, int why);
552
553 /*
554  * Handle magic process-wide effects of stop/continue signals.
555  * Unlike the signal actions, these happen immediately at signal-generation
556  * time regardless of blocking, ignoring, or handling.  This does the
557  * actual continuing for SIGCONT, but not the actual stopping for stop
558  * signals.  The process stop is done as a signal action for SIG_DFL.
559  */
560 static void handle_stop_signal(int sig, struct task_struct *p)
561 {
562         struct task_struct *t;
563
564         if (p->signal->flags & SIGNAL_GROUP_EXIT)
565                 /*
566                  * The process is in the middle of dying already.
567                  */
568                 return;
569
570         if (sig_kernel_stop(sig)) {
571                 /*
572                  * This is a stop signal.  Remove SIGCONT from all queues.
573                  */
574                 rm_from_queue(sigmask(SIGCONT), &p->signal->shared_pending);
575                 t = p;
576                 do {
577                         rm_from_queue(sigmask(SIGCONT), &t->pending);
578                         t = next_thread(t);
579                 } while (t != p);
580         } else if (sig == SIGCONT) {
581                 /*
582                  * Remove all stop signals from all queues,
583                  * and wake all threads.
584                  */
585                 if (unlikely(p->signal->group_stop_count > 0)) {
586                         /*
587                          * There was a group stop in progress.  We'll
588                          * pretend it finished before we got here.  We are
589                          * obliged to report it to the parent: if the
590                          * SIGSTOP happened "after" this SIGCONT, then it
591                          * would have cleared this pending SIGCONT.  If it
592                          * happened "before" this SIGCONT, then the parent
593                          * got the SIGCHLD about the stop finishing before
594                          * the continue happened.  We do the notification
595                          * now, and it's as if the stop had finished and
596                          * the SIGCHLD was pending on entry to this kill.
597                          */
598                         p->signal->group_stop_count = 0;
599                         p->signal->flags = SIGNAL_STOP_CONTINUED;
600                         spin_unlock(&p->sighand->siglock);
601                         do_notify_parent_cldstop(p, CLD_STOPPED);
602                         spin_lock(&p->sighand->siglock);
603                 }
604                 rm_from_queue(SIG_KERNEL_STOP_MASK, &p->signal->shared_pending);
605                 t = p;
606                 do {
607                         unsigned int state;
608                         rm_from_queue(SIG_KERNEL_STOP_MASK, &t->pending);
609                         
610                         /*
611                          * If there is a handler for SIGCONT, we must make
612                          * sure that no thread returns to user mode before
613                          * we post the signal, in case it was the only
614                          * thread eligible to run the signal handler--then
615                          * it must not do anything between resuming and
616                          * running the handler.  With the TIF_SIGPENDING
617                          * flag set, the thread will pause and acquire the
618                          * siglock that we hold now and until we've queued
619                          * the pending signal. 
620                          *
621                          * Wake up the stopped thread _after_ setting
622                          * TIF_SIGPENDING
623                          */
624                         state = TASK_STOPPED;
625                         if (sig_user_defined(t, SIGCONT) && !sigismember(&t->blocked, SIGCONT)) {
626                                 set_tsk_thread_flag(t, TIF_SIGPENDING);
627                                 state |= TASK_INTERRUPTIBLE;
628                         }
629                         wake_up_state(t, state);
630
631                         t = next_thread(t);
632                 } while (t != p);
633
634                 if (p->signal->flags & SIGNAL_STOP_STOPPED) {
635                         /*
636                          * We were in fact stopped, and are now continued.
637                          * Notify the parent with CLD_CONTINUED.
638                          */
639                         p->signal->flags = SIGNAL_STOP_CONTINUED;
640                         p->signal->group_exit_code = 0;
641                         spin_unlock(&p->sighand->siglock);
642                         do_notify_parent_cldstop(p, CLD_CONTINUED);
643                         spin_lock(&p->sighand->siglock);
644                 } else {
645                         /*
646                          * We are not stopped, but there could be a stop
647                          * signal in the middle of being processed after
648                          * being removed from the queue.  Clear that too.
649                          */
650                         p->signal->flags = 0;
651                 }
652         } else if (sig == SIGKILL) {
653                 /*
654                  * Make sure that any pending stop signal already dequeued
655                  * is undone by the wakeup for SIGKILL.
656                  */
657                 p->signal->flags = 0;
658         }
659 }
660
661 static int send_signal(int sig, struct siginfo *info, struct task_struct *t,
662                         struct sigpending *signals)
663 {
664         struct sigqueue * q = NULL;
665         int ret = 0;
666
667         /*
668          * Deliver the signal to listening signalfds. This must be called
669          * with the sighand lock held.
670          */
671         signalfd_notify(t, sig);
672
673         /*
674          * fast-pathed signals for kernel-internal things like SIGSTOP
675          * or SIGKILL.
676          */
677         if (info == SEND_SIG_FORCED)
678                 goto out_set;
679
680         /* Real-time signals must be queued if sent by sigqueue, or
681            some other real-time mechanism.  It is implementation
682            defined whether kill() does so.  We attempt to do so, on
683            the principle of least surprise, but since kill is not
684            allowed to fail with EAGAIN when low on memory we just
685            make sure at least one signal gets delivered and don't
686            pass on the info struct.  */
687
688         q = __sigqueue_alloc(t, GFP_ATOMIC, (sig < SIGRTMIN &&
689                                              (is_si_special(info) ||
690                                               info->si_code >= 0)));
691         if (q) {
692                 list_add_tail(&q->list, &signals->list);
693                 switch ((unsigned long) info) {
694                 case (unsigned long) SEND_SIG_NOINFO:
695                         q->info.si_signo = sig;
696                         q->info.si_errno = 0;
697                         q->info.si_code = SI_USER;
698                         q->info.si_pid = current->pid;
699                         q->info.si_uid = current->uid;
700                         break;
701                 case (unsigned long) SEND_SIG_PRIV:
702                         q->info.si_signo = sig;
703                         q->info.si_errno = 0;
704                         q->info.si_code = SI_KERNEL;
705                         q->info.si_pid = 0;
706                         q->info.si_uid = 0;
707                         break;
708                 default:
709                         copy_siginfo(&q->info, info);
710                         break;
711                 }
712         } else if (!is_si_special(info)) {
713                 if (sig >= SIGRTMIN && info->si_code != SI_USER)
714                 /*
715                  * Queue overflow, abort.  We may abort if the signal was rt
716                  * and sent by user using something other than kill().
717                  */
718                         return -EAGAIN;
719         }
720
721 out_set:
722         sigaddset(&signals->signal, sig);
723         return ret;
724 }
725
726 #define LEGACY_QUEUE(sigptr, sig) \
727         (((sig) < SIGRTMIN) && sigismember(&(sigptr)->signal, (sig)))
728
729 int print_fatal_signals;
730
731 static void print_fatal_signal(struct pt_regs *regs, int signr)
732 {
733         printk("%s/%d: potentially unexpected fatal signal %d.\n",
734                 current->comm, current->pid, signr);
735
736 #ifdef __i386__
737         printk("code at %08lx: ", regs->eip);
738         {
739                 int i;
740                 for (i = 0; i < 16; i++) {
741                         unsigned char insn;
742
743                         __get_user(insn, (unsigned char *)(regs->eip + i));
744                         printk("%02x ", insn);
745                 }
746         }
747 #endif
748         printk("\n");
749         show_regs(regs);
750 }
751
752 static int __init setup_print_fatal_signals(char *str)
753 {
754         get_option (&str, &print_fatal_signals);
755
756         return 1;
757 }
758
759 __setup("print-fatal-signals=", setup_print_fatal_signals);
760
761 static int
762 specific_send_sig_info(int sig, struct siginfo *info, struct task_struct *t)
763 {
764         int ret = 0;
765
766         BUG_ON(!irqs_disabled());
767         assert_spin_locked(&t->sighand->siglock);
768
769         /* Short-circuit ignored signals.  */
770         if (sig_ignored(t, sig))
771                 goto out;
772
773         /* Support queueing exactly one non-rt signal, so that we
774            can get more detailed information about the cause of
775            the signal. */
776         if (LEGACY_QUEUE(&t->pending, sig))
777                 goto out;
778
779         ret = send_signal(sig, info, t, &t->pending);
780         if (!ret && !sigismember(&t->blocked, sig))
781                 signal_wake_up(t, sig == SIGKILL);
782 out:
783         return ret;
784 }
785
786 /*
787  * Force a signal that the process can't ignore: if necessary
788  * we unblock the signal and change any SIG_IGN to SIG_DFL.
789  *
790  * Note: If we unblock the signal, we always reset it to SIG_DFL,
791  * since we do not want to have a signal handler that was blocked
792  * be invoked when user space had explicitly blocked it.
793  *
794  * We don't want to have recursive SIGSEGV's etc, for example.
795  */
796 int
797 force_sig_info(int sig, struct siginfo *info, struct task_struct *t)
798 {
799         unsigned long int flags;
800         int ret, blocked, ignored;
801         struct k_sigaction *action;
802
803         spin_lock_irqsave(&t->sighand->siglock, flags);
804         action = &t->sighand->action[sig-1];
805         ignored = action->sa.sa_handler == SIG_IGN;
806         blocked = sigismember(&t->blocked, sig);
807         if (blocked || ignored) {
808                 action->sa.sa_handler = SIG_DFL;
809                 if (blocked) {
810                         sigdelset(&t->blocked, sig);
811                         recalc_sigpending_and_wake(t);
812                 }
813         }
814         ret = specific_send_sig_info(sig, info, t);
815         spin_unlock_irqrestore(&t->sighand->siglock, flags);
816
817         return ret;
818 }
819
820 void
821 force_sig_specific(int sig, struct task_struct *t)
822 {
823         force_sig_info(sig, SEND_SIG_FORCED, t);
824 }
825
826 /*
827  * Test if P wants to take SIG.  After we've checked all threads with this,
828  * it's equivalent to finding no threads not blocking SIG.  Any threads not
829  * blocking SIG were ruled out because they are not running and already
830  * have pending signals.  Such threads will dequeue from the shared queue
831  * as soon as they're available, so putting the signal on the shared queue
832  * will be equivalent to sending it to one such thread.
833  */
834 static inline int wants_signal(int sig, struct task_struct *p)
835 {
836         if (sigismember(&p->blocked, sig))
837                 return 0;
838         if (p->flags & PF_EXITING)
839                 return 0;
840         if (sig == SIGKILL)
841                 return 1;
842         if (p->state & (TASK_STOPPED | TASK_TRACED))
843                 return 0;
844         return task_curr(p) || !signal_pending(p);
845 }
846
847 static void
848 __group_complete_signal(int sig, struct task_struct *p)
849 {
850         struct task_struct *t;
851
852         /*
853          * Now find a thread we can wake up to take the signal off the queue.
854          *
855          * If the main thread wants the signal, it gets first crack.
856          * Probably the least surprising to the average bear.
857          */
858         if (wants_signal(sig, p))
859                 t = p;
860         else if (thread_group_empty(p))
861                 /*
862                  * There is just one thread and it does not need to be woken.
863                  * It will dequeue unblocked signals before it runs again.
864                  */
865                 return;
866         else {
867                 /*
868                  * Otherwise try to find a suitable thread.
869                  */
870                 t = p->signal->curr_target;
871                 if (t == NULL)
872                         /* restart balancing at this thread */
873                         t = p->signal->curr_target = p;
874
875                 while (!wants_signal(sig, t)) {
876                         t = next_thread(t);
877                         if (t == p->signal->curr_target)
878                                 /*
879                                  * No thread needs to be woken.
880                                  * Any eligible threads will see
881                                  * the signal in the queue soon.
882                                  */
883                                 return;
884                 }
885                 p->signal->curr_target = t;
886         }
887
888         /*
889          * Found a killable thread.  If the signal will be fatal,
890          * then start taking the whole group down immediately.
891          */
892         if (sig_fatal(p, sig) && !(p->signal->flags & SIGNAL_GROUP_EXIT) &&
893             !sigismember(&t->real_blocked, sig) &&
894             (sig == SIGKILL || !(t->ptrace & PT_PTRACED))) {
895                 /*
896                  * This signal will be fatal to the whole group.
897                  */
898                 if (!sig_kernel_coredump(sig)) {
899                         /*
900                          * Start a group exit and wake everybody up.
901                          * This way we don't have other threads
902                          * running and doing things after a slower
903                          * thread has the fatal signal pending.
904                          */
905                         p->signal->flags = SIGNAL_GROUP_EXIT;
906                         p->signal->group_exit_code = sig;
907                         p->signal->group_stop_count = 0;
908                         t = p;
909                         do {
910                                 sigaddset(&t->pending.signal, SIGKILL);
911                                 signal_wake_up(t, 1);
912                         } while_each_thread(p, t);
913                         return;
914                 }
915
916                 /*
917                  * There will be a core dump.  We make all threads other
918                  * than the chosen one go into a group stop so that nothing
919                  * happens until it gets scheduled, takes the signal off
920                  * the shared queue, and does the core dump.  This is a
921                  * little more complicated than strictly necessary, but it
922                  * keeps the signal state that winds up in the core dump
923                  * unchanged from the death state, e.g. which thread had
924                  * the core-dump signal unblocked.
925                  */
926                 rm_from_queue(SIG_KERNEL_STOP_MASK, &t->pending);
927                 rm_from_queue(SIG_KERNEL_STOP_MASK, &p->signal->shared_pending);
928                 p->signal->group_stop_count = 0;
929                 p->signal->group_exit_task = t;
930                 p = t;
931                 do {
932                         p->signal->group_stop_count++;
933                         signal_wake_up(t, t == p);
934                 } while_each_thread(p, t);
935                 return;
936         }
937
938         /*
939          * The signal is already in the shared-pending queue.
940          * Tell the chosen thread to wake up and dequeue it.
941          */
942         signal_wake_up(t, sig == SIGKILL);
943         return;
944 }
945
946 int
947 __group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
948 {
949         int ret = 0;
950
951         assert_spin_locked(&p->sighand->siglock);
952         handle_stop_signal(sig, p);
953
954         /* Short-circuit ignored signals.  */
955         if (sig_ignored(p, sig))
956                 return ret;
957
958         if (LEGACY_QUEUE(&p->signal->shared_pending, sig))
959                 /* This is a non-RT signal and we already have one queued.  */
960                 return ret;
961
962         /*
963          * Put this signal on the shared-pending queue, or fail with EAGAIN.
964          * We always use the shared queue for process-wide signals,
965          * to avoid several races.
966          */
967         ret = send_signal(sig, info, p, &p->signal->shared_pending);
968         if (unlikely(ret))
969                 return ret;
970
971         __group_complete_signal(sig, p);
972         return 0;
973 }
974
975 /*
976  * Nuke all other threads in the group.
977  */
978 void zap_other_threads(struct task_struct *p)
979 {
980         struct task_struct *t;
981
982         p->signal->flags = SIGNAL_GROUP_EXIT;
983         p->signal->group_stop_count = 0;
984
985         for (t = next_thread(p); t != p; t = next_thread(t)) {
986                 /*
987                  * Don't bother with already dead threads
988                  */
989                 if (t->exit_state)
990                         continue;
991
992                 /* SIGKILL will be handled before any pending SIGSTOP */
993                 sigaddset(&t->pending.signal, SIGKILL);
994                 signal_wake_up(t, 1);
995         }
996 }
997
998 /*
999  * Must be called under rcu_read_lock() or with tasklist_lock read-held.
1000  */
1001 struct sighand_struct *lock_task_sighand(struct task_struct *tsk, unsigned long *flags)
1002 {
1003         struct sighand_struct *sighand;
1004
1005         for (;;) {
1006                 sighand = rcu_dereference(tsk->sighand);
1007                 if (unlikely(sighand == NULL))
1008                         break;
1009
1010                 spin_lock_irqsave(&sighand->siglock, *flags);
1011                 if (likely(sighand == tsk->sighand))
1012                         break;
1013                 spin_unlock_irqrestore(&sighand->siglock, *flags);
1014         }
1015
1016         return sighand;
1017 }
1018
1019 int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
1020 {
1021         unsigned long flags;
1022         int ret;
1023
1024         ret = check_kill_permission(sig, info, p);
1025
1026         if (!ret && sig) {
1027                 ret = -ESRCH;
1028                 if (lock_task_sighand(p, &flags)) {
1029                         ret = __group_send_sig_info(sig, info, p);
1030                         unlock_task_sighand(p, &flags);
1031                 }
1032         }
1033
1034         return ret;
1035 }
1036
1037 /*
1038  * kill_pgrp_info() sends a signal to a process group: this is what the tty
1039  * control characters do (^C, ^Z etc)
1040  */
1041
1042 int __kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp)
1043 {
1044         struct task_struct *p = NULL;
1045         int retval, success;
1046
1047         success = 0;
1048         retval = -ESRCH;
1049         do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
1050                 int err = group_send_sig_info(sig, info, p);
1051                 success |= !err;
1052                 retval = err;
1053         } while_each_pid_task(pgrp, PIDTYPE_PGID, p);
1054         return success ? 0 : retval;
1055 }
1056
1057 int kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp)
1058 {
1059         int retval;
1060
1061         read_lock(&tasklist_lock);
1062         retval = __kill_pgrp_info(sig, info, pgrp);
1063         read_unlock(&tasklist_lock);
1064
1065         return retval;
1066 }
1067
1068 int kill_pid_info(int sig, struct siginfo *info, struct pid *pid)
1069 {
1070         int error;
1071         struct task_struct *p;
1072
1073         rcu_read_lock();
1074         if (unlikely(sig_needs_tasklist(sig)))
1075                 read_lock(&tasklist_lock);
1076
1077         p = pid_task(pid, PIDTYPE_PID);
1078         error = -ESRCH;
1079         if (p)
1080                 error = group_send_sig_info(sig, info, p);
1081
1082         if (unlikely(sig_needs_tasklist(sig)))
1083                 read_unlock(&tasklist_lock);
1084         rcu_read_unlock();
1085         return error;
1086 }
1087
1088 int
1089 kill_proc_info(int sig, struct siginfo *info, pid_t pid)
1090 {
1091         int error;
1092         rcu_read_lock();
1093         error = kill_pid_info(sig, info, find_pid(pid));
1094         rcu_read_unlock();
1095         return error;
1096 }
1097
1098 /* like kill_pid_info(), but doesn't use uid/euid of "current" */
1099 int kill_pid_info_as_uid(int sig, struct siginfo *info, struct pid *pid,
1100                       uid_t uid, uid_t euid, u32 secid)
1101 {
1102         int ret = -EINVAL;
1103         struct task_struct *p;
1104
1105         if (!valid_signal(sig))
1106                 return ret;
1107
1108         read_lock(&tasklist_lock);
1109         p = pid_task(pid, PIDTYPE_PID);
1110         if (!p) {
1111                 ret = -ESRCH;
1112                 goto out_unlock;
1113         }
1114         if ((info == SEND_SIG_NOINFO || (!is_si_special(info) && SI_FROMUSER(info)))
1115             && (euid != p->suid) && (euid != p->uid)
1116             && (uid != p->suid) && (uid != p->uid)) {
1117                 ret = -EPERM;
1118                 goto out_unlock;
1119         }
1120         ret = security_task_kill(p, info, sig, secid);
1121         if (ret)
1122                 goto out_unlock;
1123         if (sig && p->sighand) {
1124                 unsigned long flags;
1125                 spin_lock_irqsave(&p->sighand->siglock, flags);
1126                 ret = __group_send_sig_info(sig, info, p);
1127                 spin_unlock_irqrestore(&p->sighand->siglock, flags);
1128         }
1129 out_unlock:
1130         read_unlock(&tasklist_lock);
1131         return ret;
1132 }
1133 EXPORT_SYMBOL_GPL(kill_pid_info_as_uid);
1134
1135 /*
1136  * kill_something_info() interprets pid in interesting ways just like kill(2).
1137  *
1138  * POSIX specifies that kill(-1,sig) is unspecified, but what we have
1139  * is probably wrong.  Should make it like BSD or SYSV.
1140  */
1141
1142 static int kill_something_info(int sig, struct siginfo *info, int pid)
1143 {
1144         int ret;
1145         rcu_read_lock();
1146         if (!pid) {
1147                 ret = kill_pgrp_info(sig, info, task_pgrp(current));
1148         } else if (pid == -1) {
1149                 int retval = 0, count = 0;
1150                 struct task_struct * p;
1151
1152                 read_lock(&tasklist_lock);
1153                 for_each_process(p) {
1154                         if (p->pid > 1 && p->tgid != current->tgid) {
1155                                 int err = group_send_sig_info(sig, info, p);
1156                                 ++count;
1157                                 if (err != -EPERM)
1158                                         retval = err;
1159                         }
1160                 }
1161                 read_unlock(&tasklist_lock);
1162                 ret = count ? retval : -ESRCH;
1163         } else if (pid < 0) {
1164                 ret = kill_pgrp_info(sig, info, find_pid(-pid));
1165         } else {
1166                 ret = kill_pid_info(sig, info, find_pid(pid));
1167         }
1168         rcu_read_unlock();
1169         return ret;
1170 }
1171
1172 /*
1173  * These are for backward compatibility with the rest of the kernel source.
1174  */
1175
1176 /*
1177  * These two are the most common entry points.  They send a signal
1178  * just to the specific thread.
1179  */
1180 int
1181 send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
1182 {
1183         int ret;
1184         unsigned long flags;
1185
1186         /*
1187          * Make sure legacy kernel users don't send in bad values
1188          * (normal paths check this in check_kill_permission).
1189          */
1190         if (!valid_signal(sig))
1191                 return -EINVAL;
1192
1193         /*
1194          * We need the tasklist lock even for the specific
1195          * thread case (when we don't need to follow the group
1196          * lists) in order to avoid races with "p->sighand"
1197          * going away or changing from under us.
1198          */
1199         read_lock(&tasklist_lock);  
1200         spin_lock_irqsave(&p->sighand->siglock, flags);
1201         ret = specific_send_sig_info(sig, info, p);
1202         spin_unlock_irqrestore(&p->sighand->siglock, flags);
1203         read_unlock(&tasklist_lock);
1204         return ret;
1205 }
1206
1207 #define __si_special(priv) \
1208         ((priv) ? SEND_SIG_PRIV : SEND_SIG_NOINFO)
1209
1210 int
1211 send_sig(int sig, struct task_struct *p, int priv)
1212 {
1213         return send_sig_info(sig, __si_special(priv), p);
1214 }
1215
1216 /*
1217  * This is the entry point for "process-wide" signals.
1218  * They will go to an appropriate thread in the thread group.
1219  */
1220 int
1221 send_group_sig_info(int sig, struct siginfo *info, struct task_struct *p)
1222 {
1223         int ret;
1224         read_lock(&tasklist_lock);
1225         ret = group_send_sig_info(sig, info, p);
1226         read_unlock(&tasklist_lock);
1227         return ret;
1228 }
1229
1230 void
1231 force_sig(int sig, struct task_struct *p)
1232 {
1233         force_sig_info(sig, SEND_SIG_PRIV, p);
1234 }
1235
1236 /*
1237  * When things go south during signal handling, we
1238  * will force a SIGSEGV. And if the signal that caused
1239  * the problem was already a SIGSEGV, we'll want to
1240  * make sure we don't even try to deliver the signal..
1241  */
1242 int
1243 force_sigsegv(int sig, struct task_struct *p)
1244 {
1245         if (sig == SIGSEGV) {
1246                 unsigned long flags;
1247                 spin_lock_irqsave(&p->sighand->siglock, flags);
1248                 p->sighand->action[sig - 1].sa.sa_handler = SIG_DFL;
1249                 spin_unlock_irqrestore(&p->sighand->siglock, flags);
1250         }
1251         force_sig(SIGSEGV, p);
1252         return 0;
1253 }
1254
1255 int kill_pgrp(struct pid *pid, int sig, int priv)
1256 {
1257         return kill_pgrp_info(sig, __si_special(priv), pid);
1258 }
1259 EXPORT_SYMBOL(kill_pgrp);
1260
1261 int kill_pid(struct pid *pid, int sig, int priv)
1262 {
1263         return kill_pid_info(sig, __si_special(priv), pid);
1264 }
1265 EXPORT_SYMBOL(kill_pid);
1266
1267 int
1268 kill_proc(pid_t pid, int sig, int priv)
1269 {
1270         return kill_proc_info(sig, __si_special(priv), pid);
1271 }
1272
1273 /*
1274  * These functions support sending signals using preallocated sigqueue
1275  * structures.  This is needed "because realtime applications cannot
1276  * afford to lose notifications of asynchronous events, like timer
1277  * expirations or I/O completions".  In the case of Posix Timers 
1278  * we allocate the sigqueue structure from the timer_create.  If this
1279  * allocation fails we are able to report the failure to the application
1280  * with an EAGAIN error.
1281  */
1282  
1283 struct sigqueue *sigqueue_alloc(void)
1284 {
1285         struct sigqueue *q;
1286
1287         if ((q = __sigqueue_alloc(current, GFP_KERNEL, 0)))
1288                 q->flags |= SIGQUEUE_PREALLOC;
1289         return(q);
1290 }
1291
1292 void sigqueue_free(struct sigqueue *q)
1293 {
1294         unsigned long flags;
1295         spinlock_t *lock = &current->sighand->siglock;
1296
1297         BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));
1298         /*
1299          * If the signal is still pending remove it from the
1300          * pending queue. We must hold ->siglock while testing
1301          * q->list to serialize with collect_signal().
1302          */
1303         spin_lock_irqsave(lock, flags);
1304         if (!list_empty(&q->list))
1305                 list_del_init(&q->list);
1306         spin_unlock_irqrestore(lock, flags);
1307
1308         q->flags &= ~SIGQUEUE_PREALLOC;
1309         __sigqueue_free(q);
1310 }
1311
1312 int send_sigqueue(int sig, struct sigqueue *q, struct task_struct *p)
1313 {
1314         unsigned long flags;
1315         int ret = 0;
1316
1317         BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));
1318
1319         /*
1320          * The rcu based delayed sighand destroy makes it possible to
1321          * run this without tasklist lock held. The task struct itself
1322          * cannot go away as create_timer did get_task_struct().
1323          *
1324          * We return -1, when the task is marked exiting, so
1325          * posix_timer_event can redirect it to the group leader
1326          */
1327         rcu_read_lock();
1328
1329         if (!likely(lock_task_sighand(p, &flags))) {
1330                 ret = -1;
1331                 goto out_err;
1332         }
1333
1334         if (unlikely(!list_empty(&q->list))) {
1335                 /*
1336                  * If an SI_TIMER entry is already queue just increment
1337                  * the overrun count.
1338                  */
1339                 BUG_ON(q->info.si_code != SI_TIMER);
1340                 q->info.si_overrun++;
1341                 goto out;
1342         }
1343         /* Short-circuit ignored signals.  */
1344         if (sig_ignored(p, sig)) {
1345                 ret = 1;
1346                 goto out;
1347         }
1348         /*
1349          * Deliver the signal to listening signalfds. This must be called
1350          * with the sighand lock held.
1351          */
1352         signalfd_notify(p, sig);
1353
1354         list_add_tail(&q->list, &p->pending.list);
1355         sigaddset(&p->pending.signal, sig);
1356         if (!sigismember(&p->blocked, sig))
1357                 signal_wake_up(p, sig == SIGKILL);
1358
1359 out:
1360         unlock_task_sighand(p, &flags);
1361 out_err:
1362         rcu_read_unlock();
1363
1364         return ret;
1365 }
1366
1367 int
1368 send_group_sigqueue(int sig, struct sigqueue *q, struct task_struct *p)
1369 {
1370         unsigned long flags;
1371         int ret = 0;
1372
1373         BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));
1374
1375         read_lock(&tasklist_lock);
1376         /* Since it_lock is held, p->sighand cannot be NULL. */
1377         spin_lock_irqsave(&p->sighand->siglock, flags);
1378         handle_stop_signal(sig, p);
1379
1380         /* Short-circuit ignored signals.  */
1381         if (sig_ignored(p, sig)) {
1382                 ret = 1;
1383                 goto out;
1384         }
1385
1386         if (unlikely(!list_empty(&q->list))) {
1387                 /*
1388                  * If an SI_TIMER entry is already queue just increment
1389                  * the overrun count.  Other uses should not try to
1390                  * send the signal multiple times.
1391                  */
1392                 BUG_ON(q->info.si_code != SI_TIMER);
1393                 q->info.si_overrun++;
1394                 goto out;
1395         } 
1396         /*
1397          * Deliver the signal to listening signalfds. This must be called
1398          * with the sighand lock held.
1399          */
1400         signalfd_notify(p, sig);
1401
1402         /*
1403          * Put this signal on the shared-pending queue.
1404          * We always use the shared queue for process-wide signals,
1405          * to avoid several races.
1406          */
1407         list_add_tail(&q->list, &p->signal->shared_pending.list);
1408         sigaddset(&p->signal->shared_pending.signal, sig);
1409
1410         __group_complete_signal(sig, p);
1411 out:
1412         spin_unlock_irqrestore(&p->sighand->siglock, flags);
1413         read_unlock(&tasklist_lock);
1414         return ret;
1415 }
1416
1417 /*
1418  * Wake up any threads in the parent blocked in wait* syscalls.
1419  */
1420 static inline void __wake_up_parent(struct task_struct *p,
1421                                     struct task_struct *parent)
1422 {
1423         wake_up_interruptible_sync(&parent->signal->wait_chldexit);
1424 }
1425
1426 /*
1427  * Let a parent know about the death of a child.
1428  * For a stopped/continued status change, use do_notify_parent_cldstop instead.
1429  */
1430
1431 void do_notify_parent(struct task_struct *tsk, int sig)
1432 {
1433         struct siginfo info;
1434         unsigned long flags;
1435         struct sighand_struct *psig;
1436
1437         BUG_ON(sig == -1);
1438
1439         /* do_notify_parent_cldstop should have been called instead.  */
1440         BUG_ON(tsk->state & (TASK_STOPPED|TASK_TRACED));
1441
1442         BUG_ON(!tsk->ptrace &&
1443                (tsk->group_leader != tsk || !thread_group_empty(tsk)));
1444
1445         info.si_signo = sig;
1446         info.si_errno = 0;
1447         info.si_pid = tsk->pid;
1448         info.si_uid = tsk->uid;
1449
1450         /* FIXME: find out whether or not this is supposed to be c*time. */
1451         info.si_utime = cputime_to_jiffies(cputime_add(tsk->utime,
1452                                                        tsk->signal->utime));
1453         info.si_stime = cputime_to_jiffies(cputime_add(tsk->stime,
1454                                                        tsk->signal->stime));
1455
1456         info.si_status = tsk->exit_code & 0x7f;
1457         if (tsk->exit_code & 0x80)
1458                 info.si_code = CLD_DUMPED;
1459         else if (tsk->exit_code & 0x7f)
1460                 info.si_code = CLD_KILLED;
1461         else {
1462                 info.si_code = CLD_EXITED;
1463                 info.si_status = tsk->exit_code >> 8;
1464         }
1465
1466         psig = tsk->parent->sighand;
1467         spin_lock_irqsave(&psig->siglock, flags);
1468         if (!tsk->ptrace && sig == SIGCHLD &&
1469             (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN ||
1470              (psig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT))) {
1471                 /*
1472                  * We are exiting and our parent doesn't care.  POSIX.1
1473                  * defines special semantics for setting SIGCHLD to SIG_IGN
1474                  * or setting the SA_NOCLDWAIT flag: we should be reaped
1475                  * automatically and not left for our parent's wait4 call.
1476                  * Rather than having the parent do it as a magic kind of
1477                  * signal handler, we just set this to tell do_exit that we
1478                  * can be cleaned up without becoming a zombie.  Note that
1479                  * we still call __wake_up_parent in this case, because a
1480                  * blocked sys_wait4 might now return -ECHILD.
1481                  *
1482                  * Whether we send SIGCHLD or not for SA_NOCLDWAIT
1483                  * is implementation-defined: we do (if you don't want
1484                  * it, just use SIG_IGN instead).
1485                  */
1486                 tsk->exit_signal = -1;
1487                 if (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN)
1488                         sig = 0;
1489         }
1490         if (valid_signal(sig) && sig > 0)
1491                 __group_send_sig_info(sig, &info, tsk->parent);
1492         __wake_up_parent(tsk, tsk->parent);
1493         spin_unlock_irqrestore(&psig->siglock, flags);
1494 }
1495
1496 static void do_notify_parent_cldstop(struct task_struct *tsk, int why)
1497 {
1498         struct siginfo info;
1499         unsigned long flags;
1500         struct task_struct *parent;
1501         struct sighand_struct *sighand;
1502
1503         if (tsk->ptrace & PT_PTRACED)
1504                 parent = tsk->parent;
1505         else {
1506                 tsk = tsk->group_leader;
1507                 parent = tsk->real_parent;
1508         }
1509
1510         info.si_signo = SIGCHLD;
1511         info.si_errno = 0;
1512         info.si_pid = tsk->pid;
1513         info.si_uid = tsk->uid;
1514
1515         /* FIXME: find out whether or not this is supposed to be c*time. */
1516         info.si_utime = cputime_to_jiffies(tsk->utime);
1517         info.si_stime = cputime_to_jiffies(tsk->stime);
1518
1519         info.si_code = why;
1520         switch (why) {
1521         case CLD_CONTINUED:
1522                 info.si_status = SIGCONT;
1523                 break;
1524         case CLD_STOPPED:
1525                 info.si_status = tsk->signal->group_exit_code & 0x7f;
1526                 break;
1527         case CLD_TRAPPED:
1528                 info.si_status = tsk->exit_code & 0x7f;
1529                 break;
1530         default:
1531                 BUG();
1532         }
1533
1534         sighand = parent->sighand;
1535         spin_lock_irqsave(&sighand->siglock, flags);
1536         if (sighand->action[SIGCHLD-1].sa.sa_handler != SIG_IGN &&
1537             !(sighand->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))
1538                 __group_send_sig_info(SIGCHLD, &info, parent);
1539         /*
1540          * Even if SIGCHLD is not generated, we must wake up wait4 calls.
1541          */
1542         __wake_up_parent(tsk, parent);
1543         spin_unlock_irqrestore(&sighand->siglock, flags);
1544 }
1545
1546 static inline int may_ptrace_stop(void)
1547 {
1548         if (!likely(current->ptrace & PT_PTRACED))
1549                 return 0;
1550
1551         if (unlikely(current->parent == current->real_parent &&
1552                     (current->ptrace & PT_ATTACHED)))
1553                 return 0;
1554
1555         /*
1556          * Are we in the middle of do_coredump?
1557          * If so and our tracer is also part of the coredump stopping
1558          * is a deadlock situation, and pointless because our tracer
1559          * is dead so don't allow us to stop.
1560          * If SIGKILL was already sent before the caller unlocked
1561          * ->siglock we must see ->core_waiters != 0. Otherwise it
1562          * is safe to enter schedule().
1563          */
1564         if (unlikely(current->mm->core_waiters) &&
1565             unlikely(current->mm == current->parent->mm))
1566                 return 0;
1567
1568         return 1;
1569 }
1570
1571 /*
1572  * This must be called with current->sighand->siglock held.
1573  *
1574  * This should be the path for all ptrace stops.
1575  * We always set current->last_siginfo while stopped here.
1576  * That makes it a way to test a stopped process for
1577  * being ptrace-stopped vs being job-control-stopped.
1578  *
1579  * If we actually decide not to stop at all because the tracer is gone,
1580  * we leave nostop_code in current->exit_code.
1581  */
1582 static void ptrace_stop(int exit_code, int nostop_code, siginfo_t *info)
1583 {
1584         /*
1585          * If there is a group stop in progress,
1586          * we must participate in the bookkeeping.
1587          */
1588         if (current->signal->group_stop_count > 0)
1589                 --current->signal->group_stop_count;
1590
1591         current->last_siginfo = info;
1592         current->exit_code = exit_code;
1593
1594         /* Let the debugger run.  */
1595         set_current_state(TASK_TRACED);
1596         spin_unlock_irq(&current->sighand->siglock);
1597         try_to_freeze();
1598         read_lock(&tasklist_lock);
1599         if (may_ptrace_stop()) {
1600                 do_notify_parent_cldstop(current, CLD_TRAPPED);
1601                 read_unlock(&tasklist_lock);
1602                 schedule();
1603         } else {
1604                 /*
1605                  * By the time we got the lock, our tracer went away.
1606                  * Don't stop here.
1607                  */
1608                 read_unlock(&tasklist_lock);
1609                 set_current_state(TASK_RUNNING);
1610                 current->exit_code = nostop_code;
1611         }
1612
1613         /*
1614          * We are back.  Now reacquire the siglock before touching
1615          * last_siginfo, so that we are sure to have synchronized with
1616          * any signal-sending on another CPU that wants to examine it.
1617          */
1618         spin_lock_irq(&current->sighand->siglock);
1619         current->last_siginfo = NULL;
1620
1621         /*
1622          * Queued signals ignored us while we were stopped for tracing.
1623          * So check for any that we should take before resuming user mode.
1624          * This sets TIF_SIGPENDING, but never clears it.
1625          */
1626         recalc_sigpending_tsk(current);
1627 }
1628
1629 void ptrace_notify(int exit_code)
1630 {
1631         siginfo_t info;
1632
1633         BUG_ON((exit_code & (0x7f | ~0xffff)) != SIGTRAP);
1634
1635         memset(&info, 0, sizeof info);
1636         info.si_signo = SIGTRAP;
1637         info.si_code = exit_code;
1638         info.si_pid = current->pid;
1639         info.si_uid = current->uid;
1640
1641         /* Let the debugger run.  */
1642         spin_lock_irq(&current->sighand->siglock);
1643         ptrace_stop(exit_code, 0, &info);
1644         spin_unlock_irq(&current->sighand->siglock);
1645 }
1646
1647 static void
1648 finish_stop(int stop_count)
1649 {
1650         /*
1651          * If there are no other threads in the group, or if there is
1652          * a group stop in progress and we are the last to stop,
1653          * report to the parent.  When ptraced, every thread reports itself.
1654          */
1655         if (stop_count == 0 || (current->ptrace & PT_PTRACED)) {
1656                 read_lock(&tasklist_lock);
1657                 do_notify_parent_cldstop(current, CLD_STOPPED);
1658                 read_unlock(&tasklist_lock);
1659         }
1660
1661         do {
1662                 schedule();
1663         } while (try_to_freeze());
1664         /*
1665          * Now we don't run again until continued.
1666          */
1667         current->exit_code = 0;
1668 }
1669
1670 /*
1671  * This performs the stopping for SIGSTOP and other stop signals.
1672  * We have to stop all threads in the thread group.
1673  * Returns nonzero if we've actually stopped and released the siglock.
1674  * Returns zero if we didn't stop and still hold the siglock.
1675  */
1676 static int do_signal_stop(int signr)
1677 {
1678         struct signal_struct *sig = current->signal;
1679         int stop_count;
1680
1681         if (!likely(sig->flags & SIGNAL_STOP_DEQUEUED))
1682                 return 0;
1683
1684         if (sig->group_stop_count > 0) {
1685                 /*
1686                  * There is a group stop in progress.  We don't need to
1687                  * start another one.
1688                  */
1689                 stop_count = --sig->group_stop_count;
1690         } else {
1691                 /*
1692                  * There is no group stop already in progress.
1693                  * We must initiate one now.
1694                  */
1695                 struct task_struct *t;
1696
1697                 sig->group_exit_code = signr;
1698
1699                 stop_count = 0;
1700                 for (t = next_thread(current); t != current; t = next_thread(t))
1701                         /*
1702                          * Setting state to TASK_STOPPED for a group
1703                          * stop is always done with the siglock held,
1704                          * so this check has no races.
1705                          */
1706                         if (!t->exit_state &&
1707                             !(t->state & (TASK_STOPPED|TASK_TRACED))) {
1708                                 stop_count++;
1709                                 signal_wake_up(t, 0);
1710                         }
1711                 sig->group_stop_count = stop_count;
1712         }
1713
1714         if (stop_count == 0)
1715                 sig->flags = SIGNAL_STOP_STOPPED;
1716         current->exit_code = sig->group_exit_code;
1717         __set_current_state(TASK_STOPPED);
1718
1719         spin_unlock_irq(&current->sighand->siglock);
1720         finish_stop(stop_count);
1721         return 1;
1722 }
1723
1724 /*
1725  * Do appropriate magic when group_stop_count > 0.
1726  * We return nonzero if we stopped, after releasing the siglock.
1727  * We return zero if we still hold the siglock and should look
1728  * for another signal without checking group_stop_count again.
1729  */
1730 static int handle_group_stop(void)
1731 {
1732         int stop_count;
1733
1734         if (current->signal->group_exit_task == current) {
1735                 /*
1736                  * Group stop is so we can do a core dump,
1737                  * We are the initiating thread, so get on with it.
1738                  */
1739                 current->signal->group_exit_task = NULL;
1740                 return 0;
1741         }
1742
1743         if (current->signal->flags & SIGNAL_GROUP_EXIT)
1744                 /*
1745                  * Group stop is so another thread can do a core dump,
1746                  * or else we are racing against a death signal.
1747                  * Just punt the stop so we can get the next signal.
1748                  */
1749                 return 0;
1750
1751         /*
1752          * There is a group stop in progress.  We stop
1753          * without any associated signal being in our queue.
1754          */
1755         stop_count = --current->signal->group_stop_count;
1756         if (stop_count == 0)
1757                 current->signal->flags = SIGNAL_STOP_STOPPED;
1758         current->exit_code = current->signal->group_exit_code;
1759         set_current_state(TASK_STOPPED);
1760         spin_unlock_irq(&current->sighand->siglock);
1761         finish_stop(stop_count);
1762         return 1;
1763 }
1764
1765 int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka,
1766                           struct pt_regs *regs, void *cookie)
1767 {
1768         sigset_t *mask = &current->blocked;
1769         int signr = 0;
1770
1771         try_to_freeze();
1772
1773 relock:
1774         spin_lock_irq(&current->sighand->siglock);
1775         for (;;) {
1776                 struct k_sigaction *ka;
1777
1778                 if (unlikely(current->signal->group_stop_count > 0) &&
1779                     handle_group_stop())
1780                         goto relock;
1781
1782                 signr = dequeue_signal(current, mask, info);
1783
1784                 if (!signr)
1785                         break; /* will return 0 */
1786
1787                 if ((current->ptrace & PT_PTRACED) && signr != SIGKILL) {
1788                         ptrace_signal_deliver(regs, cookie);
1789
1790                         /* Let the debugger run.  */
1791                         ptrace_stop(signr, signr, info);
1792
1793                         /* We're back.  Did the debugger cancel the sig?  */
1794                         signr = current->exit_code;
1795                         if (signr == 0)
1796                                 continue;
1797
1798                         current->exit_code = 0;
1799
1800                         /* Update the siginfo structure if the signal has
1801                            changed.  If the debugger wanted something
1802                            specific in the siginfo structure then it should
1803                            have updated *info via PTRACE_SETSIGINFO.  */
1804                         if (signr != info->si_signo) {
1805                                 info->si_signo = signr;
1806                                 info->si_errno = 0;
1807                                 info->si_code = SI_USER;
1808                                 info->si_pid = current->parent->pid;
1809                                 info->si_uid = current->parent->uid;
1810                         }
1811
1812                         /* If the (new) signal is now blocked, requeue it.  */
1813                         if (sigismember(&current->blocked, signr)) {
1814                                 specific_send_sig_info(signr, info, current);
1815                                 continue;
1816                         }
1817                 }
1818
1819                 ka = &current->sighand->action[signr-1];
1820                 if (ka->sa.sa_handler == SIG_IGN) /* Do nothing.  */
1821                         continue;
1822                 if (ka->sa.sa_handler != SIG_DFL) {
1823                         /* Run the handler.  */
1824                         *return_ka = *ka;
1825
1826                         if (ka->sa.sa_flags & SA_ONESHOT)
1827                                 ka->sa.sa_handler = SIG_DFL;
1828
1829                         break; /* will return non-zero "signr" value */
1830                 }
1831
1832                 /*
1833                  * Now we are doing the default action for this signal.
1834                  */
1835                 if (sig_kernel_ignore(signr)) /* Default is nothing. */
1836                         continue;
1837
1838                 /*
1839                  * Init of a pid space gets no signals it doesn't want from
1840                  * within that pid space. It can of course get signals from
1841                  * its parent pid space.
1842                  */
1843                 if (current == child_reaper(current))
1844                         continue;
1845
1846                 if (sig_kernel_stop(signr)) {
1847                         /*
1848                          * The default action is to stop all threads in
1849                          * the thread group.  The job control signals
1850                          * do nothing in an orphaned pgrp, but SIGSTOP
1851                          * always works.  Note that siglock needs to be
1852                          * dropped during the call to is_orphaned_pgrp()
1853                          * because of lock ordering with tasklist_lock.
1854                          * This allows an intervening SIGCONT to be posted.
1855                          * We need to check for that and bail out if necessary.
1856                          */
1857                         if (signr != SIGSTOP) {
1858                                 spin_unlock_irq(&current->sighand->siglock);
1859
1860                                 /* signals can be posted during this window */
1861
1862                                 if (is_current_pgrp_orphaned())
1863                                         goto relock;
1864
1865                                 spin_lock_irq(&current->sighand->siglock);
1866                         }
1867
1868                         if (likely(do_signal_stop(signr))) {
1869                                 /* It released the siglock.  */
1870                                 goto relock;
1871                         }
1872
1873                         /*
1874                          * We didn't actually stop, due to a race
1875                          * with SIGCONT or something like that.
1876                          */
1877                         continue;
1878                 }
1879
1880                 spin_unlock_irq(&current->sighand->siglock);
1881
1882                 /*
1883                  * Anything else is fatal, maybe with a core dump.
1884                  */
1885                 current->flags |= PF_SIGNALED;
1886                 if ((signr != SIGKILL) && print_fatal_signals)
1887                         print_fatal_signal(regs, signr);
1888                 if (sig_kernel_coredump(signr)) {
1889                         /*
1890                          * If it was able to dump core, this kills all
1891                          * other threads in the group and synchronizes with
1892                          * their demise.  If we lost the race with another
1893                          * thread getting here, it set group_exit_code
1894                          * first and our do_group_exit call below will use
1895                          * that value and ignore the one we pass it.
1896                          */
1897                         do_coredump((long)signr, signr, regs);
1898                 }
1899
1900                 /*
1901                  * Death signals, no core dump.
1902                  */
1903                 do_group_exit(signr);
1904                 /* NOTREACHED */
1905         }
1906         spin_unlock_irq(&current->sighand->siglock);
1907         return signr;
1908 }
1909
1910 EXPORT_SYMBOL(recalc_sigpending);
1911 EXPORT_SYMBOL_GPL(dequeue_signal);
1912 EXPORT_SYMBOL(flush_signals);
1913 EXPORT_SYMBOL(force_sig);
1914 EXPORT_SYMBOL(kill_proc);
1915 EXPORT_SYMBOL(ptrace_notify);
1916 EXPORT_SYMBOL(send_sig);
1917 EXPORT_SYMBOL(send_sig_info);
1918 EXPORT_SYMBOL(sigprocmask);
1919 EXPORT_SYMBOL(block_all_signals);
1920 EXPORT_SYMBOL(unblock_all_signals);
1921
1922
1923 /*
1924  * System call entry points.
1925  */
1926
1927 asmlinkage long sys_restart_syscall(void)
1928 {
1929         struct restart_block *restart = &current_thread_info()->restart_block;
1930         return restart->fn(restart);
1931 }
1932
1933 long do_no_restart_syscall(struct restart_block *param)
1934 {
1935         return -EINTR;
1936 }
1937
1938 /*
1939  * We don't need to get the kernel lock - this is all local to this
1940  * particular thread.. (and that's good, because this is _heavily_
1941  * used by various programs)
1942  */
1943
1944 /*
1945  * This is also useful for kernel threads that want to temporarily
1946  * (or permanently) block certain signals.
1947  *
1948  * NOTE! Unlike the user-mode sys_sigprocmask(), the kernel
1949  * interface happily blocks "unblockable" signals like SIGKILL
1950  * and friends.
1951  */
1952 int sigprocmask(int how, sigset_t *set, sigset_t *oldset)
1953 {
1954         int error;
1955
1956         spin_lock_irq(&current->sighand->siglock);
1957         if (oldset)
1958                 *oldset = current->blocked;
1959
1960         error = 0;
1961         switch (how) {
1962         case SIG_BLOCK:
1963                 sigorsets(&current->blocked, &current->blocked, set);
1964                 break;
1965         case SIG_UNBLOCK:
1966                 signandsets(&current->blocked, &current->blocked, set);
1967                 break;
1968         case SIG_SETMASK:
1969                 current->blocked = *set;
1970                 break;
1971         default:
1972                 error = -EINVAL;
1973         }
1974         recalc_sigpending();
1975         spin_unlock_irq(&current->sighand->siglock);
1976
1977         return error;
1978 }
1979
1980 asmlinkage long
1981 sys_rt_sigprocmask(int how, sigset_t __user *set, sigset_t __user *oset, size_t sigsetsize)
1982 {
1983         int error = -EINVAL;
1984         sigset_t old_set, new_set;
1985
1986         /* XXX: Don't preclude handling different sized sigset_t's.  */
1987         if (sigsetsize != sizeof(sigset_t))
1988                 goto out;
1989
1990         if (set) {
1991                 error = -EFAULT;
1992                 if (copy_from_user(&new_set, set, sizeof(*set)))
1993                         goto out;
1994                 sigdelsetmask(&new_set, sigmask(SIGKILL)|sigmask(SIGSTOP));
1995
1996                 error = sigprocmask(how, &new_set, &old_set);
1997                 if (error)
1998                         goto out;
1999                 if (oset)
2000                         goto set_old;
2001         } else if (oset) {
2002                 spin_lock_irq(&current->sighand->siglock);
2003                 old_set = current->blocked;
2004                 spin_unlock_irq(&current->sighand->siglock);
2005
2006         set_old:
2007                 error = -EFAULT;
2008                 if (copy_to_user(oset, &old_set, sizeof(*oset)))
2009                         goto out;
2010         }
2011         error = 0;
2012 out:
2013         return error;
2014 }
2015
2016 long do_sigpending(void __user *set, unsigned long sigsetsize)
2017 {
2018         long error = -EINVAL;
2019         sigset_t pending;
2020
2021         if (sigsetsize > sizeof(sigset_t))
2022                 goto out;
2023
2024         spin_lock_irq(&current->sighand->siglock);
2025         sigorsets(&pending, &current->pending.signal,
2026                   &current->signal->shared_pending.signal);
2027         spin_unlock_irq(&current->sighand->siglock);
2028
2029         /* Outside the lock because only this thread touches it.  */
2030         sigandsets(&pending, &current->blocked, &pending);
2031
2032         error = -EFAULT;
2033         if (!copy_to_user(set, &pending, sigsetsize))
2034                 error = 0;
2035
2036 out:
2037         return error;
2038 }       
2039
2040 asmlinkage long
2041 sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize)
2042 {
2043         return do_sigpending(set, sigsetsize);
2044 }
2045
2046 #ifndef HAVE_ARCH_COPY_SIGINFO_TO_USER
2047
2048 int copy_siginfo_to_user(siginfo_t __user *to, siginfo_t *from)
2049 {
2050         int err;
2051
2052         if (!access_ok (VERIFY_WRITE, to, sizeof(siginfo_t)))
2053                 return -EFAULT;
2054         if (from->si_code < 0)
2055                 return __copy_to_user(to, from, sizeof(siginfo_t))
2056                         ? -EFAULT : 0;
2057         /*
2058          * If you change siginfo_t structure, please be sure
2059          * this code is fixed accordingly.
2060          * Please remember to update the signalfd_copyinfo() function
2061          * inside fs/signalfd.c too, in case siginfo_t changes.
2062          * It should never copy any pad contained in the structure
2063          * to avoid security leaks, but must copy the generic
2064          * 3 ints plus the relevant union member.
2065          */
2066         err = __put_user(from->si_signo, &to->si_signo);
2067         err |= __put_user(from->si_errno, &to->si_errno);
2068         err |= __put_user((short)from->si_code, &to->si_code);
2069         switch (from->si_code & __SI_MASK) {
2070         case __SI_KILL:
2071                 err |= __put_user(from->si_pid, &to->si_pid);
2072                 err |= __put_user(from->si_uid, &to->si_uid);
2073                 break;
2074         case __SI_TIMER:
2075                  err |= __put_user(from->si_tid, &to->si_tid);
2076                  err |= __put_user(from->si_overrun, &to->si_overrun);
2077                  err |= __put_user(from->si_ptr, &to->si_ptr);
2078                 break;
2079         case __SI_POLL:
2080                 err |= __put_user(from->si_band, &to->si_band);
2081                 err |= __put_user(from->si_fd, &to->si_fd);
2082                 break;
2083         case __SI_FAULT:
2084                 err |= __put_user(from->si_addr, &to->si_addr);
2085 #ifdef __ARCH_SI_TRAPNO
2086                 err |= __put_user(from->si_trapno, &to->si_trapno);
2087 #endif
2088                 break;
2089         case __SI_CHLD:
2090                 err |= __put_user(from->si_pid, &to->si_pid);
2091                 err |= __put_user(from->si_uid, &to->si_uid);
2092                 err |= __put_user(from->si_status, &to->si_status);
2093                 err |= __put_user(from->si_utime, &to->si_utime);
2094                 err |= __put_user(from->si_stime, &to->si_stime);
2095                 break;
2096         case __SI_RT: /* This is not generated by the kernel as of now. */
2097         case __SI_MESGQ: /* But this is */
2098                 err |= __put_user(from->si_pid, &to->si_pid);
2099                 err |= __put_user(from->si_uid, &to->si_uid);
2100                 err |= __put_user(from->si_ptr, &to->si_ptr);
2101                 break;
2102         default: /* this is just in case for now ... */
2103                 err |= __put_user(from->si_pid, &to->si_pid);
2104                 err |= __put_user(from->si_uid, &to->si_uid);
2105                 break;
2106         }
2107         return err;
2108 }
2109
2110 #endif
2111
2112 asmlinkage long
2113 sys_rt_sigtimedwait(const sigset_t __user *uthese,
2114                     siginfo_t __user *uinfo,
2115                     const struct timespec __user *uts,
2116                     size_t sigsetsize)
2117 {
2118         int ret, sig;
2119         sigset_t these;
2120         struct timespec ts;
2121         siginfo_t info;
2122         long timeout = 0;
2123
2124         /* XXX: Don't preclude handling different sized sigset_t's.  */
2125         if (sigsetsize != sizeof(sigset_t))
2126                 return -EINVAL;
2127
2128         if (copy_from_user(&these, uthese, sizeof(these)))
2129                 return -EFAULT;
2130                 
2131         /*
2132          * Invert the set of allowed signals to get those we
2133          * want to block.
2134          */
2135         sigdelsetmask(&these, sigmask(SIGKILL)|sigmask(SIGSTOP));
2136         signotset(&these);
2137
2138         if (uts) {
2139                 if (copy_from_user(&ts, uts, sizeof(ts)))
2140                         return -EFAULT;
2141                 if (ts.tv_nsec >= 1000000000L || ts.tv_nsec < 0
2142                     || ts.tv_sec < 0)
2143                         return -EINVAL;
2144         }
2145
2146         spin_lock_irq(&current->sighand->siglock);
2147         sig = dequeue_signal(current, &these, &info);
2148         if (!sig) {
2149                 timeout = MAX_SCHEDULE_TIMEOUT;
2150                 if (uts)
2151                         timeout = (timespec_to_jiffies(&ts)
2152                                    + (ts.tv_sec || ts.tv_nsec));
2153
2154                 if (timeout) {
2155                         /* None ready -- temporarily unblock those we're
2156                          * interested while we are sleeping in so that we'll
2157                          * be awakened when they arrive.  */
2158                         current->real_blocked = current->blocked;
2159                         sigandsets(&current->blocked, &current->blocked, &these);
2160                         recalc_sigpending();
2161                         spin_unlock_irq(&current->sighand->siglock);
2162
2163                         timeout = schedule_timeout_interruptible(timeout);
2164
2165                         spin_lock_irq(&current->sighand->siglock);
2166                         sig = dequeue_signal(current, &these, &info);
2167                         current->blocked = current->real_blocked;
2168                         siginitset(&current->real_blocked, 0);
2169                         recalc_sigpending();
2170                 }
2171         }
2172         spin_unlock_irq(&current->sighand->siglock);
2173
2174         if (sig) {
2175                 ret = sig;
2176                 if (uinfo) {
2177                         if (copy_siginfo_to_user(uinfo, &info))
2178                                 ret = -EFAULT;
2179                 }
2180         } else {
2181                 ret = -EAGAIN;
2182                 if (timeout)
2183                         ret = -EINTR;
2184         }
2185
2186         return ret;
2187 }
2188
2189 asmlinkage long
2190 sys_kill(int pid, int sig)
2191 {
2192         struct siginfo info;
2193
2194         info.si_signo = sig;
2195         info.si_errno = 0;
2196         info.si_code = SI_USER;
2197         info.si_pid = current->tgid;
2198         info.si_uid = current->uid;
2199
2200         return kill_something_info(sig, &info, pid);
2201 }
2202
2203 static int do_tkill(int tgid, int pid, int sig)
2204 {
2205         int error;
2206         struct siginfo info;
2207         struct task_struct *p;
2208
2209         error = -ESRCH;
2210         info.si_signo = sig;
2211         info.si_errno = 0;
2212         info.si_code = SI_TKILL;
2213         info.si_pid = current->tgid;
2214         info.si_uid = current->uid;
2215
2216         read_lock(&tasklist_lock);
2217         p = find_task_by_pid(pid);
2218         if (p && (tgid <= 0 || p->tgid == tgid)) {
2219                 error = check_kill_permission(sig, &info, p);
2220                 /*
2221                  * The null signal is a permissions and process existence
2222                  * probe.  No signal is actually delivered.
2223                  */
2224                 if (!error && sig && p->sighand) {
2225                         spin_lock_irq(&p->sighand->siglock);
2226                         handle_stop_signal(sig, p);
2227                         error = specific_send_sig_info(sig, &info, p);
2228                         spin_unlock_irq(&p->sighand->siglock);
2229                 }
2230         }
2231         read_unlock(&tasklist_lock);
2232
2233         return error;
2234 }
2235
2236 /**
2237  *  sys_tgkill - send signal to one specific thread
2238  *  @tgid: the thread group ID of the thread
2239  *  @pid: the PID of the thread
2240  *  @sig: signal to be sent
2241  *
2242  *  This syscall also checks the @tgid and returns -ESRCH even if the PID
2243  *  exists but it's not belonging to the target process anymore. This
2244  *  method solves the problem of threads exiting and PIDs getting reused.
2245  */
2246 asmlinkage long sys_tgkill(int tgid, int pid, int sig)
2247 {
2248         /* This is only valid for single tasks */
2249         if (pid <= 0 || tgid <= 0)
2250                 return -EINVAL;
2251
2252         return do_tkill(tgid, pid, sig);
2253 }
2254
2255 /*
2256  *  Send a signal to only one task, even if it's a CLONE_THREAD task.
2257  */
2258 asmlinkage long
2259 sys_tkill(int pid, int sig)
2260 {
2261         /* This is only valid for single tasks */
2262         if (pid <= 0)
2263                 return -EINVAL;
2264
2265         return do_tkill(0, pid, sig);
2266 }
2267
2268 asmlinkage long
2269 sys_rt_sigqueueinfo(int pid, int sig, siginfo_t __user *uinfo)
2270 {
2271         siginfo_t info;
2272
2273         if (copy_from_user(&info, uinfo, sizeof(siginfo_t)))
2274                 return -EFAULT;
2275
2276         /* Not even root can pretend to send signals from the kernel.
2277            Nor can they impersonate a kill(), which adds source info.  */
2278         if (info.si_code >= 0)
2279                 return -EPERM;
2280         info.si_signo = sig;
2281
2282         /* POSIX.1b doesn't mention process groups.  */
2283         return kill_proc_info(sig, &info, pid);
2284 }
2285
2286 int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact)
2287 {
2288         struct k_sigaction *k;
2289         sigset_t mask;
2290
2291         if (!valid_signal(sig) || sig < 1 || (act && sig_kernel_only(sig)))
2292                 return -EINVAL;
2293
2294         k = &current->sighand->action[sig-1];
2295
2296         spin_lock_irq(&current->sighand->siglock);
2297         if (oact)
2298                 *oact = *k;
2299
2300         if (act) {
2301                 sigdelsetmask(&act->sa.sa_mask,
2302                               sigmask(SIGKILL) | sigmask(SIGSTOP));
2303                 *k = *act;
2304                 /*
2305                  * POSIX 3.3.1.3:
2306                  *  "Setting a signal action to SIG_IGN for a signal that is
2307                  *   pending shall cause the pending signal to be discarded,
2308                  *   whether or not it is blocked."
2309                  *
2310                  *  "Setting a signal action to SIG_DFL for a signal that is
2311                  *   pending and whose default action is to ignore the signal
2312                  *   (for example, SIGCHLD), shall cause the pending signal to
2313                  *   be discarded, whether or not it is blocked"
2314                  */
2315                 if (act->sa.sa_handler == SIG_IGN ||
2316                    (act->sa.sa_handler == SIG_DFL && sig_kernel_ignore(sig))) {
2317                         struct task_struct *t = current;
2318                         sigemptyset(&mask);
2319                         sigaddset(&mask, sig);
2320                         rm_from_queue_full(&mask, &t->signal->shared_pending);
2321                         do {
2322                                 rm_from_queue_full(&mask, &t->pending);
2323                                 t = next_thread(t);
2324                         } while (t != current);
2325                 }
2326         }
2327
2328         spin_unlock_irq(&current->sighand->siglock);
2329         return 0;
2330 }
2331
2332 int 
2333 do_sigaltstack (const stack_t __user *uss, stack_t __user *uoss, unsigned long sp)
2334 {
2335         stack_t oss;
2336         int error;
2337
2338         if (uoss) {
2339                 oss.ss_sp = (void __user *) current->sas_ss_sp;
2340                 oss.ss_size = current->sas_ss_size;
2341                 oss.ss_flags = sas_ss_flags(sp);
2342         }
2343
2344         if (uss) {
2345                 void __user *ss_sp;
2346                 size_t ss_size;
2347                 int ss_flags;
2348
2349                 error = -EFAULT;
2350                 if (!access_ok(VERIFY_READ, uss, sizeof(*uss))
2351                     || __get_user(ss_sp, &uss->ss_sp)
2352                     || __get_user(ss_flags, &uss->ss_flags)
2353                     || __get_user(ss_size, &uss->ss_size))
2354                         goto out;
2355
2356                 error = -EPERM;
2357                 if (on_sig_stack(sp))
2358                         goto out;
2359
2360                 error = -EINVAL;
2361                 /*
2362                  *
2363                  * Note - this code used to test ss_flags incorrectly
2364                  *        old code may have been written using ss_flags==0
2365                  *        to mean ss_flags==SS_ONSTACK (as this was the only
2366                  *        way that worked) - this fix preserves that older
2367                  *        mechanism
2368                  */
2369                 if (ss_flags != SS_DISABLE && ss_flags != SS_ONSTACK && ss_flags != 0)
2370                         goto out;
2371
2372                 if (ss_flags == SS_DISABLE) {
2373                         ss_size = 0;
2374                         ss_sp = NULL;
2375                 } else {
2376                         error = -ENOMEM;
2377                         if (ss_size < MINSIGSTKSZ)
2378                                 goto out;
2379                 }
2380
2381                 current->sas_ss_sp = (unsigned long) ss_sp;
2382                 current->sas_ss_size = ss_size;
2383         }
2384
2385         if (uoss) {
2386                 error = -EFAULT;
2387                 if (copy_to_user(uoss, &oss, sizeof(oss)))
2388                         goto out;
2389         }
2390
2391         error = 0;
2392 out:
2393         return error;
2394 }
2395
2396 #ifdef __ARCH_WANT_SYS_SIGPENDING
2397
2398 asmlinkage long
2399 sys_sigpending(old_sigset_t __user *set)
2400 {
2401         return do_sigpending(set, sizeof(*set));
2402 }
2403
2404 #endif
2405
2406 #ifdef __ARCH_WANT_SYS_SIGPROCMASK
2407 /* Some platforms have their own version with special arguments others
2408    support only sys_rt_sigprocmask.  */
2409
2410 asmlinkage long
2411 sys_sigprocmask(int how, old_sigset_t __user *set, old_sigset_t __user *oset)
2412 {
2413         int error;
2414         old_sigset_t old_set, new_set;
2415
2416         if (set) {
2417                 error = -EFAULT;
2418                 if (copy_from_user(&new_set, set, sizeof(*set)))
2419                         goto out;
2420                 new_set &= ~(sigmask(SIGKILL) | sigmask(SIGSTOP));
2421
2422                 spin_lock_irq(&current->sighand->siglock);
2423                 old_set = current->blocked.sig[0];
2424
2425                 error = 0;
2426                 switch (how) {
2427                 default:
2428                         error = -EINVAL;
2429                         break;
2430                 case SIG_BLOCK:
2431                         sigaddsetmask(&current->blocked, new_set);
2432                         break;
2433                 case SIG_UNBLOCK:
2434                         sigdelsetmask(&current->blocked, new_set);
2435                         break;
2436                 case SIG_SETMASK:
2437                         current->blocked.sig[0] = new_set;
2438                         break;
2439                 }
2440
2441                 recalc_sigpending();
2442                 spin_unlock_irq(&current->sighand->siglock);
2443                 if (error)
2444                         goto out;
2445                 if (oset)
2446                         goto set_old;
2447         } else if (oset) {
2448                 old_set = current->blocked.sig[0];
2449         set_old:
2450                 error = -EFAULT;
2451                 if (copy_to_user(oset, &old_set, sizeof(*oset)))
2452                         goto out;
2453         }
2454         error = 0;
2455 out:
2456         return error;
2457 }
2458 #endif /* __ARCH_WANT_SYS_SIGPROCMASK */
2459
2460 #ifdef __ARCH_WANT_SYS_RT_SIGACTION
2461 asmlinkage long
2462 sys_rt_sigaction(int sig,
2463                  const struct sigaction __user *act,
2464                  struct sigaction __user *oact,
2465                  size_t sigsetsize)
2466 {
2467         struct k_sigaction new_sa, old_sa;
2468         int ret = -EINVAL;
2469
2470         /* XXX: Don't preclude handling different sized sigset_t's.  */
2471         if (sigsetsize != sizeof(sigset_t))
2472                 goto out;
2473
2474         if (act) {
2475                 if (copy_from_user(&new_sa.sa, act, sizeof(new_sa.sa)))
2476                         return -EFAULT;
2477         }
2478
2479         ret = do_sigaction(sig, act ? &new_sa : NULL, oact ? &old_sa : NULL);
2480
2481         if (!ret && oact) {
2482                 if (copy_to_user(oact, &old_sa.sa, sizeof(old_sa.sa)))
2483                         return -EFAULT;
2484         }
2485 out:
2486         return ret;
2487 }
2488 #endif /* __ARCH_WANT_SYS_RT_SIGACTION */
2489
2490 #ifdef __ARCH_WANT_SYS_SGETMASK
2491
2492 /*
2493  * For backwards compatibility.  Functionality superseded by sigprocmask.
2494  */
2495 asmlinkage long
2496 sys_sgetmask(void)
2497 {
2498         /* SMP safe */
2499         return current->blocked.sig[0];
2500 }
2501
2502 asmlinkage long
2503 sys_ssetmask(int newmask)
2504 {
2505         int old;
2506
2507         spin_lock_irq(&current->sighand->siglock);
2508         old = current->blocked.sig[0];
2509
2510         siginitset(&current->blocked, newmask & ~(sigmask(SIGKILL)|
2511                                                   sigmask(SIGSTOP)));
2512         recalc_sigpending();
2513         spin_unlock_irq(&current->sighand->siglock);
2514
2515         return old;
2516 }
2517 #endif /* __ARCH_WANT_SGETMASK */
2518
2519 #ifdef __ARCH_WANT_SYS_SIGNAL
2520 /*
2521  * For backwards compatibility.  Functionality superseded by sigaction.
2522  */
2523 asmlinkage unsigned long
2524 sys_signal(int sig, __sighandler_t handler)
2525 {
2526         struct k_sigaction new_sa, old_sa;
2527         int ret;
2528
2529         new_sa.sa.sa_handler = handler;
2530         new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK;
2531         sigemptyset(&new_sa.sa.sa_mask);
2532
2533         ret = do_sigaction(sig, &new_sa, &old_sa);
2534
2535         return ret ? ret : (unsigned long)old_sa.sa.sa_handler;
2536 }
2537 #endif /* __ARCH_WANT_SYS_SIGNAL */
2538
2539 #ifdef __ARCH_WANT_SYS_PAUSE
2540
2541 asmlinkage long
2542 sys_pause(void)
2543 {
2544         current->state = TASK_INTERRUPTIBLE;
2545         schedule();
2546         return -ERESTARTNOHAND;
2547 }
2548
2549 #endif
2550
2551 #ifdef __ARCH_WANT_SYS_RT_SIGSUSPEND
2552 asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize)
2553 {
2554         sigset_t newset;
2555
2556         /* XXX: Don't preclude handling different sized sigset_t's.  */
2557         if (sigsetsize != sizeof(sigset_t))
2558                 return -EINVAL;
2559
2560         if (copy_from_user(&newset, unewset, sizeof(newset)))
2561                 return -EFAULT;
2562         sigdelsetmask(&newset, sigmask(SIGKILL)|sigmask(SIGSTOP));
2563
2564         spin_lock_irq(&current->sighand->siglock);
2565         current->saved_sigmask = current->blocked;
2566         current->blocked = newset;
2567         recalc_sigpending();
2568         spin_unlock_irq(&current->sighand->siglock);
2569
2570         current->state = TASK_INTERRUPTIBLE;
2571         schedule();
2572         set_thread_flag(TIF_RESTORE_SIGMASK);
2573         return -ERESTARTNOHAND;
2574 }
2575 #endif /* __ARCH_WANT_SYS_RT_SIGSUSPEND */
2576
2577 __attribute__((weak)) const char *arch_vma_name(struct vm_area_struct *vma)
2578 {
2579         return NULL;
2580 }
2581
2582 void __init signals_init(void)
2583 {
2584         sigqueue_cachep = KMEM_CACHE(sigqueue, SLAB_PANIC);
2585 }