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