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