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