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