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