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