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