1
2
3
4
5
6
7
8
9
10
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"
35
36
37
38
39
40static struct kmem_cache *sigqueue_cachep;
41
42static int __sig_ignored(struct task_struct *t, int sig)
43{
44 void __user *handler;
45
46
47
48 handler = t->sighand->action[sig - 1].sa.sa_handler;
49 return handler == SIG_IGN ||
50 (handler == SIG_DFL && sig_kernel_ignore(sig));
51}
52
53static int sig_ignored(struct task_struct *t, int sig)
54{
55
56
57
58 if (t->ptrace & PT_PTRACED)
59 return 0;
60
61
62
63
64
65
66 if (sigismember(&t->blocked, sig) || sigismember(&t->real_blocked, sig))
67 return 0;
68
69 return __sig_ignored(t, sig);
70}
71
72
73
74
75
76static inline int has_pending_signals(sigset_t *signal, sigset_t *blocked)
77{
78 unsigned long ready;
79 long i;
80
81 switch (_NSIG_WORDS) {
82 default:
83 for (i = _NSIG_WORDS, ready = 0; --i >= 0 ;)
84 ready |= signal->sig[i] &~ blocked->sig[i];
85 break;
86
87 case 4: ready = signal->sig[3] &~ blocked->sig[3];
88 ready |= signal->sig[2] &~ blocked->sig[2];
89 ready |= signal->sig[1] &~ blocked->sig[1];
90 ready |= signal->sig[0] &~ blocked->sig[0];
91 break;
92
93 case 2: ready = signal->sig[1] &~ blocked->sig[1];
94 ready |= signal->sig[0] &~ blocked->sig[0];
95 break;
96
97 case 1: ready = signal->sig[0] &~ blocked->sig[0];
98 }
99 return ready != 0;
100}
101
102#define PENDING(p,b) has_pending_signals(&(p)->signal, (b))
103
104static int recalc_sigpending_tsk(struct task_struct *t)
105{
106 if (t->signal->group_stop_count > 0 ||
107 PENDING(&t->pending, &t->blocked) ||
108 PENDING(&t->signal->shared_pending, &t->blocked)) {
109 set_tsk_thread_flag(t, TIF_SIGPENDING);
110 return 1;
111 }
112
113
114
115
116
117 return 0;
118}
119
120
121
122
123
124void recalc_sigpending_and_wake(struct task_struct *t)
125{
126 if (recalc_sigpending_tsk(t))
127 signal_wake_up(t, 0);
128}
129
130void recalc_sigpending(void)
131{
132 if (!recalc_sigpending_tsk(current) && !freezing(current))
133 clear_thread_flag(TIF_SIGPENDING);
134
135}
136
137
138
139int next_signal(struct sigpending *pending, sigset_t *mask)
140{
141 unsigned long i, *s, *m, x;
142 int sig = 0;
143
144 s = pending->signal.sig;
145 m = mask->sig;
146 switch (_NSIG_WORDS) {
147 default:
148 for (i = 0; i < _NSIG_WORDS; ++i, ++s, ++m)
149 if ((x = *s &~ *m) != 0) {
150 sig = ffz(~x) + i*_NSIG_BPW + 1;
151 break;
152 }
153 break;
154
155 case 2: if ((x = s[0] &~ m[0]) != 0)
156 sig = 1;
157 else if ((x = s[1] &~ m[1]) != 0)
158 sig = _NSIG_BPW + 1;
159 else
160 break;
161 sig += ffz(~x);
162 break;
163
164 case 1: if ((x = *s &~ *m) != 0)
165 sig = ffz(~x) + 1;
166 break;
167 }
168
169 return sig;
170}
171
172static struct sigqueue *__sigqueue_alloc(struct task_struct *t, gfp_t flags,
173 int override_rlimit)
174{
175 struct sigqueue *q = NULL;
176 struct user_struct *user;
177
178
179
180
181
182 user = t->user;
183 barrier();
184 atomic_inc(&user->sigpending);
185 if (override_rlimit ||
186 atomic_read(&user->sigpending) <=
187 t->signal->rlim[RLIMIT_SIGPENDING].rlim_cur)
188 q = kmem_cache_alloc(sigqueue_cachep, flags);
189 if (unlikely(q == NULL)) {
190 atomic_dec(&user->sigpending);
191 } else {
192 INIT_LIST_HEAD(&q->list);
193 q->flags = 0;
194 q->user = get_uid(user);
195 }
196 return(q);
197}
198
199static void __sigqueue_free(struct sigqueue *q)
200{
201 if (q->flags & SIGQUEUE_PREALLOC)
202 return;
203 atomic_dec(&q->user->sigpending);
204 free_uid(q->user);
205 kmem_cache_free(sigqueue_cachep, q);
206}
207
208void flush_sigqueue(struct sigpending *queue)
209{
210 struct sigqueue *q;
211
212 sigemptyset(&queue->signal);
213 while (!list_empty(&queue->list)) {
214 q = list_entry(queue->list.next, struct sigqueue , list);
215 list_del_init(&q->list);
216 __sigqueue_free(q);
217 }
218}
219
220
221
222
223void flush_signals(struct task_struct *t)
224{
225 unsigned long flags;
226
227 spin_lock_irqsave(&t->sighand->siglock, flags);
228 clear_tsk_thread_flag(t, TIF_SIGPENDING);
229 flush_sigqueue(&t->pending);
230 flush_sigqueue(&t->signal->shared_pending);
231 spin_unlock_irqrestore(&t->sighand->siglock, flags);
232}
233
234static void __flush_itimer_signals(struct sigpending *pending)
235{
236 sigset_t signal, retain;
237 struct sigqueue *q, *n;
238
239 signal = pending->signal;
240 sigemptyset(&retain);
241
242 list_for_each_entry_safe(q, n, &pending->list, list) {
243 int sig = q->info.si_signo;
244
245 if (likely(q->info.si_code != SI_TIMER)) {
246 sigaddset(&retain, sig);
247 } else {
248 sigdelset(&signal, sig);
249 list_del_init(&q->list);
250 __sigqueue_free(q);
251 }
252 }
253
254 sigorsets(&pending->signal, &signal, &retain);
255}
256
257void flush_itimer_signals(void)
258{
259 struct task_struct *tsk = current;
260 unsigned long flags;
261
262 spin_lock_irqsave(&tsk->sighand->siglock, flags);
263 __flush_itimer_signals(&tsk->pending);
264 __flush_itimer_signals(&tsk->signal->shared_pending);
265 spin_unlock_irqrestore(&tsk->sighand->siglock, flags);
266}
267
268void ignore_signals(struct task_struct *t)
269{
270 int i;
271
272 for (i = 0; i < _NSIG; ++i)
273 t->sighand->action[i].sa.sa_handler = SIG_IGN;
274
275 flush_signals(t);
276}
277
278
279
280
281
282void
283flush_signal_handlers(struct task_struct *t, int force_default)
284{
285 int i;
286 struct k_sigaction *ka = &t->sighand->action[0];
287 for (i = _NSIG ; i != 0 ; i--) {
288 if (force_default || ka->sa.sa_handler != SIG_IGN)
289 ka->sa.sa_handler = SIG_DFL;
290 ka->sa.sa_flags = 0;
291 sigemptyset(&ka->sa.sa_mask);
292 ka++;
293 }
294}
295
296int unhandled_signal(struct task_struct *tsk, int sig)
297{
298 if (is_global_init(tsk))
299 return 1;
300 if (tsk->ptrace & PT_PTRACED)
301 return 0;
302 return (tsk->sighand->action[sig-1].sa.sa_handler == SIG_IGN) ||
303 (tsk->sighand->action[sig-1].sa.sa_handler == SIG_DFL);
304}
305
306
307
308
309
310
311
312
313
314
315void
316block_all_signals(int (*notifier)(void *priv), void *priv, sigset_t *mask)
317{
318 unsigned long flags;
319
320 spin_lock_irqsave(¤t->sighand->siglock, flags);
321 current->notifier_mask = mask;
322 current->notifier_data = priv;
323 current->notifier = notifier;
324 spin_unlock_irqrestore(¤t->sighand->siglock, flags);
325}
326
327
328
329void
330unblock_all_signals(void)
331{
332 unsigned long flags;
333
334 spin_lock_irqsave(¤t->sighand->siglock, flags);
335 current->notifier = NULL;
336 current->notifier_data = NULL;
337 recalc_sigpending();
338 spin_unlock_irqrestore(¤t->sighand->siglock, flags);
339}
340
341static int collect_signal(int sig, struct sigpending *list, siginfo_t *info)
342{
343 struct sigqueue *q, *first = NULL;
344 int still_pending = 0;
345
346 if (unlikely(!sigismember(&list->signal, sig)))
347 return 0;
348
349
350
351
352
353 list_for_each_entry(q, &list->list, list) {
354 if (q->info.si_signo == sig) {
355 if (first) {
356 still_pending = 1;
357 break;
358 }
359 first = q;
360 }
361 }
362 if (first) {
363 list_del_init(&first->list);
364 copy_siginfo(info, &first->info);
365 __sigqueue_free(first);
366 if (!still_pending)
367 sigdelset(&list->signal, sig);
368 } else {
369
370
371
372
373
374 sigdelset(&list->signal, sig);
375 info->si_signo = sig;
376 info->si_errno = 0;
377 info->si_code = 0;
378 info->si_pid = 0;
379 info->si_uid = 0;
380 }
381 return 1;
382}
383
384static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
385 siginfo_t *info)
386{
387 int sig = next_signal(pending, mask);
388
389 if (sig) {
390 if (current->notifier) {
391 if (sigismember(current->notifier_mask, sig)) {
392 if (!(current->notifier)(current->notifier_data)) {
393 clear_thread_flag(TIF_SIGPENDING);
394 return 0;
395 }
396 }
397 }
398
399 if (!collect_signal(sig, pending, info))
400 sig = 0;
401 }
402
403 return sig;
404}
405
406
407
408
409
410
411
412int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
413{
414 int signr;
415
416
417
418
419 signr = __dequeue_signal(&tsk->pending, mask, info);
420 if (!signr) {
421 signr = __dequeue_signal(&tsk->signal->shared_pending,
422 mask, info);
423
424
425
426
427
428
429
430
431
432
433
434
435
436 if (unlikely(signr == SIGALRM)) {
437 struct hrtimer *tmr = &tsk->signal->real_timer;
438
439 if (!hrtimer_is_queued(tmr) &&
440 tsk->signal->it_real_incr.tv64 != 0) {
441 hrtimer_forward(tmr, tmr->base->get_time(),
442 tsk->signal->it_real_incr);
443 hrtimer_restart(tmr);
444 }
445 }
446 }
447
448 recalc_sigpending();
449 if (!signr)
450 return 0;
451
452 if (unlikely(sig_kernel_stop(signr))) {
453
454
455
456
457
458
459
460
461
462
463
464
465 if (!(tsk->signal->flags & SIGNAL_GROUP_EXIT))
466 tsk->signal->flags |= SIGNAL_STOP_DEQUEUED;
467 }
468 if ((info->si_code & __SI_MASK) == __SI_TIMER && info->si_sys_private) {
469
470
471
472
473
474
475 spin_unlock(&tsk->sighand->siglock);
476 do_schedule_next_timer(info);
477 spin_lock(&tsk->sighand->siglock);
478 }
479 return signr;
480}
481
482
483
484
485
486
487
488
489
490
491
492
493void signal_wake_up(struct task_struct *t, int resume)
494{
495 unsigned int mask;
496
497 set_tsk_thread_flag(t, TIF_SIGPENDING);
498
499
500
501
502
503
504
505
506 mask = TASK_INTERRUPTIBLE;
507 if (resume)
508 mask |= TASK_WAKEKILL;
509 if (!wake_up_state(t, mask))
510 kick_process(t);
511}
512
513
514
515
516
517
518
519
520
521
522static int rm_from_queue_full(sigset_t *mask, struct sigpending *s)
523{
524 struct sigqueue *q, *n;
525 sigset_t m;
526
527 sigandsets(&m, mask, &s->signal);
528 if (sigisemptyset(&m))
529 return 0;
530
531 signandsets(&s->signal, &s->signal, mask);
532 list_for_each_entry_safe(q, n, &s->list, list) {
533 if (sigismember(mask, q->info.si_signo)) {
534 list_del_init(&q->list);
535 __sigqueue_free(q);
536 }
537 }
538 return 1;
539}
540
541
542
543
544
545
546static int rm_from_queue(unsigned long mask, struct sigpending *s)
547{
548 struct sigqueue *q, *n;
549
550 if (!sigtestsetmask(&s->signal, mask))
551 return 0;
552
553 sigdelsetmask(&s->signal, mask);
554 list_for_each_entry_safe(q, n, &s->list, list) {
555 if (q->info.si_signo < SIGRTMIN &&
556 (mask & sigmask(q->info.si_signo))) {
557 list_del_init(&q->list);
558 __sigqueue_free(q);
559 }
560 }
561 return 1;
562}
563
564
565
566
567static int check_kill_permission(int sig, struct siginfo *info,
568 struct task_struct *t)
569{
570 struct pid *sid;
571 int error;
572
573 if (!valid_signal(sig))
574 return -EINVAL;
575
576 if (info != SEND_SIG_NOINFO && (is_si_special(info) || SI_FROMKERNEL(info)))
577 return 0;
578
579 error = audit_signal_info(sig, t);
580 if (error)
581 return error;
582
583 if ((current->euid ^ t->suid) && (current->euid ^ t->uid) &&
584 (current->uid ^ t->suid) && (current->uid ^ t->uid) &&
585 !capable(CAP_KILL)) {
586 switch (sig) {
587 case SIGCONT:
588 sid = task_session(t);
589
590
591
592
593 if (!sid || sid == task_session(current))
594 break;
595 default:
596 return -EPERM;
597 }
598 }
599
600 return security_task_kill(t, info, sig, 0);
601}
602
603
604static void do_notify_parent_cldstop(struct task_struct *tsk, int why);
605
606
607
608
609
610
611
612
613
614
615
616static int prepare_signal(int sig, struct task_struct *p)
617{
618 struct signal_struct *signal = p->signal;
619 struct task_struct *t;
620
621 if (unlikely(signal->flags & SIGNAL_GROUP_EXIT)) {
622
623
624
625 } else if (sig_kernel_stop(sig)) {
626
627
628
629 rm_from_queue(sigmask(SIGCONT), &signal->shared_pending);
630 t = p;
631 do {
632 rm_from_queue(sigmask(SIGCONT), &t->pending);
633 } while_each_thread(p, t);
634 } else if (sig == SIGCONT) {
635 unsigned int why;
636
637
638
639
640 rm_from_queue(SIG_KERNEL_STOP_MASK, &signal->shared_pending);
641 t = p;
642 do {
643 unsigned int state;
644 rm_from_queue(SIG_KERNEL_STOP_MASK, &t->pending);
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659 state = __TASK_STOPPED;
660 if (sig_user_defined(t, SIGCONT) && !sigismember(&t->blocked, SIGCONT)) {
661 set_tsk_thread_flag(t, TIF_SIGPENDING);
662 state |= TASK_INTERRUPTIBLE;
663 }
664 wake_up_state(t, state);
665 } while_each_thread(p, t);
666
667
668
669
670
671
672
673
674
675 why = 0;
676 if (signal->flags & SIGNAL_STOP_STOPPED)
677 why |= SIGNAL_CLD_CONTINUED;
678 else if (signal->group_stop_count)
679 why |= SIGNAL_CLD_STOPPED;
680
681 if (why) {
682
683
684
685
686
687 signal->flags = why | SIGNAL_STOP_CONTINUED;
688 signal->group_stop_count = 0;
689 signal->group_exit_code = 0;
690 } else {
691
692
693
694
695
696 signal->flags &= ~SIGNAL_STOP_DEQUEUED;
697 }
698 }
699
700 return !sig_ignored(p, sig);
701}
702
703
704
705
706
707
708
709
710
711static inline int wants_signal(int sig, struct task_struct *p)
712{
713 if (sigismember(&p->blocked, sig))
714 return 0;
715 if (p->flags & PF_EXITING)
716 return 0;
717 if (sig == SIGKILL)
718 return 1;
719 if (task_is_stopped_or_traced(p))
720 return 0;
721 return task_curr(p) || !signal_pending(p);
722}
723
724static void complete_signal(int sig, struct task_struct *p, int group)
725{
726 struct signal_struct *signal = p->signal;
727 struct task_struct *t;
728
729
730
731
732
733
734
735 if (wants_signal(sig, p))
736 t = p;
737 else if (!group || thread_group_empty(p))
738
739
740
741
742 return;
743 else {
744
745
746
747 t = signal->curr_target;
748 while (!wants_signal(sig, t)) {
749 t = next_thread(t);
750 if (t == signal->curr_target)
751
752
753
754
755
756 return;
757 }
758 signal->curr_target = t;
759 }
760
761
762
763
764
765 if (sig_fatal(p, sig) &&
766 !(signal->flags & (SIGNAL_UNKILLABLE | SIGNAL_GROUP_EXIT)) &&
767 !sigismember(&t->real_blocked, sig) &&
768 (sig == SIGKILL || !(t->ptrace & PT_PTRACED))) {
769
770
771
772 if (!sig_kernel_coredump(sig)) {
773
774
775
776
777
778
779 signal->flags = SIGNAL_GROUP_EXIT;
780 signal->group_exit_code = sig;
781 signal->group_stop_count = 0;
782 t = p;
783 do {
784 sigaddset(&t->pending.signal, SIGKILL);
785 signal_wake_up(t, 1);
786 } while_each_thread(p, t);
787 return;
788 }
789 }
790
791
792
793
794
795 signal_wake_up(t, sig == SIGKILL);
796 return;
797}
798
799static inline int legacy_queue(struct sigpending *signals, int sig)
800{
801 return (sig < SIGRTMIN) && sigismember(&signals->signal, sig);
802}
803
804static int send_signal(int sig, struct siginfo *info, struct task_struct *t,
805 int group)
806{
807 struct sigpending *pending;
808 struct sigqueue *q;
809
810 assert_spin_locked(&t->sighand->siglock);
811 if (!prepare_signal(sig, t))
812 return 0;
813
814 pending = group ? &t->signal->shared_pending : &t->pending;
815
816
817
818
819
820 if (legacy_queue(pending, sig))
821 return 0;
822
823
824
825
826 if (info == SEND_SIG_FORCED)
827 goto out_set;
828
829
830
831
832
833
834
835
836
837 q = __sigqueue_alloc(t, GFP_ATOMIC, (sig < SIGRTMIN &&
838 (is_si_special(info) ||
839 info->si_code >= 0)));
840 if (q) {
841 list_add_tail(&q->list, &pending->list);
842 switch ((unsigned long) info) {
843 case (unsigned long) SEND_SIG_NOINFO:
844 q->info.si_signo = sig;
845 q->info.si_errno = 0;
846 q->info.si_code = SI_USER;
847 q->info.si_pid = task_pid_vnr(current);
848 q->info.si_uid = current->uid;
849 break;
850 case (unsigned long) SEND_SIG_PRIV:
851 q->info.si_signo = sig;
852 q->info.si_errno = 0;
853 q->info.si_code = SI_KERNEL;
854 q->info.si_pid = 0;
855 q->info.si_uid = 0;
856 break;
857 default:
858 copy_siginfo(&q->info, info);
859 break;
860 }
861 } else if (!is_si_special(info)) {
862 if (sig >= SIGRTMIN && info->si_code != SI_USER)
863
864
865
866
867 return -EAGAIN;
868 }
869
870out_set:
871 signalfd_notify(t, sig);
872 sigaddset(&pending->signal, sig);
873 complete_signal(sig, t, group);
874 return 0;
875}
876
877int print_fatal_signals;
878
879static void print_fatal_signal(struct pt_regs *regs, int signr)
880{
881 printk("%s/%d: potentially unexpected fatal signal %d.\n",
882 current->comm, task_pid_nr(current), signr);
883
884#if defined(__i386__) && !defined(__arch_um__)
885 printk("code at %08lx: ", regs->ip);
886 {
887 int i;
888 for (i = 0; i < 16; i++) {
889 unsigned char insn;
890
891 __get_user(insn, (unsigned char *)(regs->ip + i));
892 printk("%02x ", insn);
893 }
894 }
895#endif
896 printk("\n");
897 show_regs(regs);
898}
899
900static int __init setup_print_fatal_signals(char *str)
901{
902 get_option (&str, &print_fatal_signals);
903
904 return 1;
905}
906
907__setup("print-fatal-signals=", setup_print_fatal_signals);
908
909int
910__group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
911{
912 return send_signal(sig, info, p, 1);
913}
914
915static int
916specific_send_sig_info(int sig, struct siginfo *info, struct task_struct *t)
917{
918 return send_signal(sig, info, t, 0);
919}
920
921
922
923
924
925
926
927
928
929
930
931
932int
933force_sig_info(int sig, struct siginfo *info, struct task_struct *t)
934{
935 unsigned long int flags;
936 int ret, blocked, ignored;
937 struct k_sigaction *action;
938
939 spin_lock_irqsave(&t->sighand->siglock, flags);
940 action = &t->sighand->action[sig-1];
941 ignored = action->sa.sa_handler == SIG_IGN;
942 blocked = sigismember(&t->blocked, sig);
943 if (blocked || ignored) {
944 action->sa.sa_handler = SIG_DFL;
945 if (blocked) {
946 sigdelset(&t->blocked, sig);
947 recalc_sigpending_and_wake(t);
948 }
949 }
950 if (action->sa.sa_handler == SIG_DFL)
951 t->signal->flags &= ~SIGNAL_UNKILLABLE;
952 ret = specific_send_sig_info(sig, info, t);
953 spin_unlock_irqrestore(&t->sighand->siglock, flags);
954
955 return ret;
956}
957
958void
959force_sig_specific(int sig, struct task_struct *t)
960{
961 force_sig_info(sig, SEND_SIG_FORCED, t);
962}
963
964
965
966
967void zap_other_threads(struct task_struct *p)
968{
969 struct task_struct *t;
970
971 p->signal->group_stop_count = 0;
972
973 for (t = next_thread(p); t != p; t = next_thread(t)) {
974
975
976
977 if (t->exit_state)
978 continue;
979
980
981 sigaddset(&t->pending.signal, SIGKILL);
982 signal_wake_up(t, 1);
983 }
984}
985
986int __fatal_signal_pending(struct task_struct *tsk)
987{
988 return sigismember(&tsk->pending.signal, SIGKILL);
989}
990EXPORT_SYMBOL(__fatal_signal_pending);
991
992struct sighand_struct *lock_task_sighand(struct task_struct *tsk, unsigned long *flags)
993{
994 struct sighand_struct *sighand;
995
996 rcu_read_lock();
997 for (;;) {
998 sighand = rcu_dereference(tsk->sighand);
999 if (unlikely(sighand == NULL))
1000 break;
1001
1002 spin_lock_irqsave(&sighand->siglock, *flags);
1003 if (likely(sighand == tsk->sighand))
1004 break;
1005 spin_unlock_irqrestore(&sighand->siglock, *flags);
1006 }
1007 rcu_read_unlock();
1008
1009 return sighand;
1010}
1011
1012int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
1013{
1014 unsigned long flags;
1015 int ret;
1016
1017 ret = check_kill_permission(sig, info, p);
1018
1019 if (!ret && sig) {
1020 ret = -ESRCH;
1021 if (lock_task_sighand(p, &flags)) {
1022 ret = __group_send_sig_info(sig, info, p);
1023 unlock_task_sighand(p, &flags);
1024 }
1025 }
1026
1027 return ret;
1028}
1029
1030
1031
1032
1033
1034
1035int __kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp)
1036{
1037 struct task_struct *p = NULL;
1038 int retval, success;
1039
1040 success = 0;
1041 retval = -ESRCH;
1042 do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
1043 int err = group_send_sig_info(sig, info, p);
1044 success |= !err;
1045 retval = err;
1046 } while_each_pid_task(pgrp, PIDTYPE_PGID, p);
1047 return success ? 0 : retval;
1048}
1049
1050int kill_pid_info(int sig, struct siginfo *info, struct pid *pid)
1051{
1052 int error = -ESRCH;
1053 struct task_struct *p;
1054
1055 rcu_read_lock();
1056retry:
1057 p = pid_task(pid, PIDTYPE_PID);
1058 if (p) {
1059 error = group_send_sig_info(sig, info, p);
1060 if (unlikely(error == -ESRCH))
1061
1062
1063
1064
1065
1066
1067 goto retry;
1068 }
1069 rcu_read_unlock();
1070
1071 return error;
1072}
1073
1074int
1075kill_proc_info(int sig, struct siginfo *info, pid_t pid)
1076{
1077 int error;
1078 rcu_read_lock();
1079 error = kill_pid_info(sig, info, find_vpid(pid));
1080 rcu_read_unlock();
1081 return error;
1082}
1083
1084
1085int kill_pid_info_as_uid(int sig, struct siginfo *info, struct pid *pid,
1086 uid_t uid, uid_t euid, u32 secid)
1087{
1088 int ret = -EINVAL;
1089 struct task_struct *p;
1090
1091 if (!valid_signal(sig))
1092 return ret;
1093
1094 read_lock(&tasklist_lock);
1095 p = pid_task(pid, PIDTYPE_PID);
1096 if (!p) {
1097 ret = -ESRCH;
1098 goto out_unlock;
1099 }
1100 if ((info == SEND_SIG_NOINFO || (!is_si_special(info) && SI_FROMUSER(info)))
1101 && (euid != p->suid) && (euid != p->uid)
1102 && (uid != p->suid) && (uid != p->uid)) {
1103 ret = -EPERM;
1104 goto out_unlock;
1105 }
1106 ret = security_task_kill(p, info, sig, secid);
1107 if (ret)
1108 goto out_unlock;
1109 if (sig && p->sighand) {
1110 unsigned long flags;
1111 spin_lock_irqsave(&p->sighand->siglock, flags);
1112 ret = __group_send_sig_info(sig, info, p);
1113 spin_unlock_irqrestore(&p->sighand->siglock, flags);
1114 }
1115out_unlock:
1116 read_unlock(&tasklist_lock);
1117 return ret;
1118}
1119EXPORT_SYMBOL_GPL(kill_pid_info_as_uid);
1120
1121
1122
1123
1124
1125
1126
1127
1128static int kill_something_info(int sig, struct siginfo *info, int pid)
1129{
1130 int ret;
1131
1132 if (pid > 0) {
1133 rcu_read_lock();
1134 ret = kill_pid_info(sig, info, find_vpid(pid));
1135 rcu_read_unlock();
1136 return ret;
1137 }
1138
1139 read_lock(&tasklist_lock);
1140 if (pid != -1) {
1141 ret = __kill_pgrp_info(sig, info,
1142 pid ? find_vpid(-pid) : task_pgrp(current));
1143 } else {
1144 int retval = 0, count = 0;
1145 struct task_struct * p;
1146
1147 for_each_process(p) {
1148 if (p->pid > 1 && !same_thread_group(p, current)) {
1149 int err = group_send_sig_info(sig, info, p);
1150 ++count;
1151 if (err != -EPERM)
1152 retval = err;
1153 }
1154 }
1155 ret = count ? retval : -ESRCH;
1156 }
1157 read_unlock(&tasklist_lock);
1158
1159 return ret;
1160}
1161
1162
1163
1164
1165
1166
1167
1168
1169int
1170send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
1171{
1172 int ret;
1173 unsigned long flags;
1174
1175
1176
1177
1178
1179 if (!valid_signal(sig))
1180 return -EINVAL;
1181
1182 spin_lock_irqsave(&p->sighand->siglock, flags);
1183 ret = specific_send_sig_info(sig, info, p);
1184 spin_unlock_irqrestore(&p->sighand->siglock, flags);
1185 return ret;
1186}
1187
1188#define __si_special(priv) \
1189 ((priv) ? SEND_SIG_PRIV : SEND_SIG_NOINFO)
1190
1191int
1192send_sig(int sig, struct task_struct *p, int priv)
1193{
1194 return send_sig_info(sig, __si_special(priv), p);
1195}
1196
1197void
1198force_sig(int sig, struct task_struct *p)
1199{
1200 force_sig_info(sig, SEND_SIG_PRIV, p);
1201}
1202
1203
1204
1205
1206
1207
1208
1209int
1210force_sigsegv(int sig, struct task_struct *p)
1211{
1212 if (sig == SIGSEGV) {
1213 unsigned long flags;
1214 spin_lock_irqsave(&p->sighand->siglock, flags);
1215 p->sighand->action[sig - 1].sa.sa_handler = SIG_DFL;
1216 spin_unlock_irqrestore(&p->sighand->siglock, flags);
1217 }
1218 force_sig(SIGSEGV, p);
1219 return 0;
1220}
1221
1222int kill_pgrp(struct pid *pid, int sig, int priv)
1223{
1224 int ret;
1225
1226 read_lock(&tasklist_lock);
1227 ret = __kill_pgrp_info(sig, __si_special(priv), pid);
1228 read_unlock(&tasklist_lock);
1229
1230 return ret;
1231}
1232EXPORT_SYMBOL(kill_pgrp);
1233
1234int kill_pid(struct pid *pid, int sig, int priv)
1235{
1236 return kill_pid_info(sig, __si_special(priv), pid);
1237}
1238EXPORT_SYMBOL(kill_pid);
1239
1240int
1241kill_proc(pid_t pid, int sig, int priv)
1242{
1243 int ret;
1244
1245 rcu_read_lock();
1246 ret = kill_pid_info(sig, __si_special(priv), find_pid(pid));
1247 rcu_read_unlock();
1248 return ret;
1249}
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261struct sigqueue *sigqueue_alloc(void)
1262{
1263 struct sigqueue *q;
1264
1265 if ((q = __sigqueue_alloc(current, GFP_KERNEL, 0)))
1266 q->flags |= SIGQUEUE_PREALLOC;
1267 return(q);
1268}
1269
1270void sigqueue_free(struct sigqueue *q)
1271{
1272 unsigned long flags;
1273 spinlock_t *lock = ¤t->sighand->siglock;
1274
1275 BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));
1276
1277
1278
1279
1280
1281 spin_lock_irqsave(lock, flags);
1282 q->flags &= ~SIGQUEUE_PREALLOC;
1283
1284
1285
1286
1287 if (!list_empty(&q->list))
1288 q = NULL;
1289 spin_unlock_irqrestore(lock, flags);
1290
1291 if (q)
1292 __sigqueue_free(q);
1293}
1294
1295int send_sigqueue(struct sigqueue *q, struct task_struct *t, int group)
1296{
1297 int sig = q->info.si_signo;
1298 struct sigpending *pending;
1299 unsigned long flags;
1300 int ret;
1301
1302 BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));
1303
1304 ret = -1;
1305 if (!likely(lock_task_sighand(t, &flags)))
1306 goto ret;
1307
1308 ret = 1;
1309 if (!prepare_signal(sig, t))
1310 goto out;
1311
1312 ret = 0;
1313 if (unlikely(!list_empty(&q->list))) {
1314
1315
1316
1317
1318 BUG_ON(q->info.si_code != SI_TIMER);
1319 q->info.si_overrun++;
1320 goto out;
1321 }
1322 q->info.si_overrun = 0;
1323
1324 signalfd_notify(t, sig);
1325 pending = group ? &t->signal->shared_pending : &t->pending;
1326 list_add_tail(&q->list, &pending->list);
1327 sigaddset(&pending->signal, sig);
1328 complete_signal(sig, t, group);
1329out:
1330 unlock_task_sighand(t, &flags);
1331ret:
1332 return ret;
1333}
1334
1335
1336
1337
1338static inline void __wake_up_parent(struct task_struct *p,
1339 struct task_struct *parent)
1340{
1341 wake_up_interruptible_sync(&parent->signal->wait_chldexit);
1342}
1343
1344
1345
1346
1347
1348
1349void do_notify_parent(struct task_struct *tsk, int sig)
1350{
1351 struct siginfo info;
1352 unsigned long flags;
1353 struct sighand_struct *psig;
1354
1355 BUG_ON(sig == -1);
1356
1357
1358 BUG_ON(task_is_stopped_or_traced(tsk));
1359
1360 BUG_ON(!tsk->ptrace &&
1361 (tsk->group_leader != tsk || !thread_group_empty(tsk)));
1362
1363 info.si_signo = sig;
1364 info.si_errno = 0;
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377 rcu_read_lock();
1378 info.si_pid = task_pid_nr_ns(tsk, tsk->parent->nsproxy->pid_ns);
1379 rcu_read_unlock();
1380
1381 info.si_uid = tsk->uid;
1382
1383
1384 info.si_utime = cputime_to_jiffies(cputime_add(tsk->utime,
1385 tsk->signal->utime));
1386 info.si_stime = cputime_to_jiffies(cputime_add(tsk->stime,
1387 tsk->signal->stime));
1388
1389 info.si_status = tsk->exit_code & 0x7f;
1390 if (tsk->exit_code & 0x80)
1391 info.si_code = CLD_DUMPED;
1392 else if (tsk->exit_code & 0x7f)
1393 info.si_code = CLD_KILLED;
1394 else {
1395 info.si_code = CLD_EXITED;
1396 info.si_status = tsk->exit_code >> 8;
1397 }
1398
1399 psig = tsk->parent->sighand;
1400 spin_lock_irqsave(&psig->siglock, flags);
1401 if (!tsk->ptrace && sig == SIGCHLD &&
1402 (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN ||
1403 (psig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT))) {
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419 tsk->exit_signal = -1;
1420 if (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN)
1421 sig = 0;
1422 }
1423 if (valid_signal(sig) && sig > 0)
1424 __group_send_sig_info(sig, &info, tsk->parent);
1425 __wake_up_parent(tsk, tsk->parent);
1426 spin_unlock_irqrestore(&psig->siglock, flags);
1427}
1428
1429static void do_notify_parent_cldstop(struct task_struct *tsk, int why)
1430{
1431 struct siginfo info;
1432 unsigned long flags;
1433 struct task_struct *parent;
1434 struct sighand_struct *sighand;
1435
1436 if (tsk->ptrace & PT_PTRACED)
1437 parent = tsk->parent;
1438 else {
1439 tsk = tsk->group_leader;
1440 parent = tsk->real_parent;
1441 }
1442
1443 info.si_signo = SIGCHLD;
1444 info.si_errno = 0;
1445
1446
1447
1448 rcu_read_lock();
1449 info.si_pid = task_pid_nr_ns(tsk, tsk->parent->nsproxy->pid_ns);
1450 rcu_read_unlock();
1451
1452 info.si_uid = tsk->uid;
1453
1454
1455 info.si_utime = cputime_to_jiffies(tsk->utime);
1456 info.si_stime = cputime_to_jiffies(tsk->stime);
1457
1458 info.si_code = why;
1459 switch (why) {
1460 case CLD_CONTINUED:
1461 info.si_status = SIGCONT;
1462 break;
1463 case CLD_STOPPED:
1464 info.si_status = tsk->signal->group_exit_code & 0x7f;
1465 break;
1466 case CLD_TRAPPED:
1467 info.si_status = tsk->exit_code & 0x7f;
1468 break;
1469 default:
1470 BUG();
1471 }
1472
1473 sighand = parent->sighand;
1474 spin_lock_irqsave(&sighand->siglock, flags);
1475 if (sighand->action[SIGCHLD-1].sa.sa_handler != SIG_IGN &&
1476 !(sighand->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))
1477 __group_send_sig_info(SIGCHLD, &info, parent);
1478
1479
1480
1481 __wake_up_parent(tsk, parent);
1482 spin_unlock_irqrestore(&sighand->siglock, flags);
1483}
1484
1485static inline int may_ptrace_stop(void)
1486{
1487 if (!likely(current->ptrace & PT_PTRACED))
1488 return 0;
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498 if (unlikely(current->mm->core_waiters) &&
1499 unlikely(current->mm == current->parent->mm))
1500 return 0;
1501
1502 return 1;
1503}
1504
1505
1506
1507
1508
1509static int sigkill_pending(struct task_struct *tsk)
1510{
1511 return ((sigismember(&tsk->pending.signal, SIGKILL) ||
1512 sigismember(&tsk->signal->shared_pending.signal, SIGKILL)) &&
1513 !unlikely(sigismember(&tsk->blocked, SIGKILL)));
1514}
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527static void ptrace_stop(int exit_code, int clear_code, siginfo_t *info)
1528{
1529 int killed = 0;
1530
1531 if (arch_ptrace_stop_needed(exit_code, info)) {
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543 spin_unlock_irq(¤t->sighand->siglock);
1544 arch_ptrace_stop(exit_code, info);
1545 spin_lock_irq(¤t->sighand->siglock);
1546 killed = sigkill_pending(current);
1547 }
1548
1549
1550
1551
1552
1553 if (current->signal->group_stop_count > 0)
1554 --current->signal->group_stop_count;
1555
1556 current->last_siginfo = info;
1557 current->exit_code = exit_code;
1558
1559
1560 __set_current_state(TASK_TRACED);
1561 spin_unlock_irq(¤t->sighand->siglock);
1562 read_lock(&tasklist_lock);
1563 if (!unlikely(killed) && may_ptrace_stop()) {
1564 do_notify_parent_cldstop(current, CLD_TRAPPED);
1565 read_unlock(&tasklist_lock);
1566 schedule();
1567 } else {
1568
1569
1570
1571
1572 __set_current_state(TASK_RUNNING);
1573 if (clear_code)
1574 current->exit_code = 0;
1575 read_unlock(&tasklist_lock);
1576 }
1577
1578
1579
1580
1581
1582
1583 try_to_freeze();
1584
1585
1586
1587
1588
1589
1590 spin_lock_irq(¤t->sighand->siglock);
1591 current->last_siginfo = NULL;
1592
1593
1594
1595
1596
1597
1598 recalc_sigpending_tsk(current);
1599}
1600
1601void ptrace_notify(int exit_code)
1602{
1603 siginfo_t info;
1604
1605 BUG_ON((exit_code & (0x7f | ~0xffff)) != SIGTRAP);
1606
1607 memset(&info, 0, sizeof info);
1608 info.si_signo = SIGTRAP;
1609 info.si_code = exit_code;
1610 info.si_pid = task_pid_vnr(current);
1611 info.si_uid = current->uid;
1612
1613
1614 spin_lock_irq(¤t->sighand->siglock);
1615 ptrace_stop(exit_code, 1, &info);
1616 spin_unlock_irq(¤t->sighand->siglock);
1617}
1618
1619static void
1620finish_stop(int stop_count)
1621{
1622
1623
1624
1625
1626
1627 if (stop_count == 0 || (current->ptrace & PT_PTRACED)) {
1628 read_lock(&tasklist_lock);
1629 do_notify_parent_cldstop(current, CLD_STOPPED);
1630 read_unlock(&tasklist_lock);
1631 }
1632
1633 do {
1634 schedule();
1635 } while (try_to_freeze());
1636
1637
1638
1639 current->exit_code = 0;
1640}
1641
1642
1643
1644
1645
1646
1647
1648static int do_signal_stop(int signr)
1649{
1650 struct signal_struct *sig = current->signal;
1651 int stop_count;
1652
1653 if (sig->group_stop_count > 0) {
1654
1655
1656
1657
1658 stop_count = --sig->group_stop_count;
1659 } else {
1660 struct task_struct *t;
1661
1662 if (unlikely((sig->flags & (SIGNAL_STOP_DEQUEUED | SIGNAL_UNKILLABLE))
1663 != SIGNAL_STOP_DEQUEUED) ||
1664 unlikely(signal_group_exit(sig)))
1665 return 0;
1666
1667
1668
1669
1670 sig->group_exit_code = signr;
1671
1672 stop_count = 0;
1673 for (t = next_thread(current); t != current; t = next_thread(t))
1674
1675
1676
1677
1678
1679 if (!(t->flags & PF_EXITING) &&
1680 !task_is_stopped_or_traced(t)) {
1681 stop_count++;
1682 signal_wake_up(t, 0);
1683 }
1684 sig->group_stop_count = stop_count;
1685 }
1686
1687 if (stop_count == 0)
1688 sig->flags = SIGNAL_STOP_STOPPED;
1689 current->exit_code = sig->group_exit_code;
1690 __set_current_state(TASK_STOPPED);
1691
1692 spin_unlock_irq(¤t->sighand->siglock);
1693 finish_stop(stop_count);
1694 return 1;
1695}
1696
1697static int ptrace_signal(int signr, siginfo_t *info,
1698 struct pt_regs *regs, void *cookie)
1699{
1700 if (!(current->ptrace & PT_PTRACED))
1701 return signr;
1702
1703 ptrace_signal_deliver(regs, cookie);
1704
1705
1706 ptrace_stop(signr, 0, info);
1707
1708
1709 signr = current->exit_code;
1710 if (signr == 0)
1711 return signr;
1712
1713 current->exit_code = 0;
1714
1715
1716
1717
1718
1719 if (signr != info->si_signo) {
1720 info->si_signo = signr;
1721 info->si_errno = 0;
1722 info->si_code = SI_USER;
1723 info->si_pid = task_pid_vnr(current->parent);
1724 info->si_uid = current->parent->uid;
1725 }
1726
1727
1728 if (sigismember(¤t->blocked, signr)) {
1729 specific_send_sig_info(signr, info, current);
1730 signr = 0;
1731 }
1732
1733 return signr;
1734}
1735
1736int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka,
1737 struct pt_regs *regs, void *cookie)
1738{
1739 struct sighand_struct *sighand = current->sighand;
1740 struct signal_struct *signal = current->signal;
1741 int signr;
1742
1743relock:
1744
1745
1746
1747
1748
1749
1750 try_to_freeze();
1751
1752 spin_lock_irq(&sighand->siglock);
1753
1754
1755
1756
1757
1758 if (unlikely(signal->flags & SIGNAL_CLD_MASK)) {
1759 int why = (signal->flags & SIGNAL_STOP_CONTINUED)
1760 ? CLD_CONTINUED : CLD_STOPPED;
1761 signal->flags &= ~SIGNAL_CLD_MASK;
1762 spin_unlock_irq(&sighand->siglock);
1763
1764 read_lock(&tasklist_lock);
1765 do_notify_parent_cldstop(current->group_leader, why);
1766 read_unlock(&tasklist_lock);
1767 goto relock;
1768 }
1769
1770 for (;;) {
1771 struct k_sigaction *ka;
1772
1773 if (unlikely(signal->group_stop_count > 0) &&
1774 do_signal_stop(0))
1775 goto relock;
1776
1777 signr = dequeue_signal(current, ¤t->blocked, info);
1778 if (!signr)
1779 break;
1780
1781 if (signr != SIGKILL) {
1782 signr = ptrace_signal(signr, info, regs, cookie);
1783 if (!signr)
1784 continue;
1785 }
1786
1787 ka = &sighand->action[signr-1];
1788 if (ka->sa.sa_handler == SIG_IGN)
1789 continue;
1790 if (ka->sa.sa_handler != SIG_DFL) {
1791
1792 *return_ka = *ka;
1793
1794 if (ka->sa.sa_flags & SA_ONESHOT)
1795 ka->sa.sa_handler = SIG_DFL;
1796
1797 break;
1798 }
1799
1800
1801
1802
1803 if (sig_kernel_ignore(signr))
1804 continue;
1805
1806
1807
1808
1809 if (unlikely(signal->flags & SIGNAL_UNKILLABLE) &&
1810 !signal_group_exit(signal))
1811 continue;
1812
1813 if (sig_kernel_stop(signr)) {
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824 if (signr != SIGSTOP) {
1825 spin_unlock_irq(&sighand->siglock);
1826
1827
1828
1829 if (is_current_pgrp_orphaned())
1830 goto relock;
1831
1832 spin_lock_irq(&sighand->siglock);
1833 }
1834
1835 if (likely(do_signal_stop(signr))) {
1836
1837 goto relock;
1838 }
1839
1840
1841
1842
1843
1844 continue;
1845 }
1846
1847 spin_unlock_irq(&sighand->siglock);
1848
1849
1850
1851
1852 current->flags |= PF_SIGNALED;
1853
1854 if (sig_kernel_coredump(signr)) {
1855 if (print_fatal_signals)
1856 print_fatal_signal(regs, signr);
1857
1858
1859
1860
1861
1862
1863
1864
1865 do_coredump((long)signr, signr, regs);
1866 }
1867
1868
1869
1870
1871 do_group_exit(signr);
1872
1873 }
1874 spin_unlock_irq(&sighand->siglock);
1875 return signr;
1876}
1877
1878void exit_signals(struct task_struct *tsk)
1879{
1880 int group_stop = 0;
1881 struct task_struct *t;
1882
1883 if (thread_group_empty(tsk) || signal_group_exit(tsk->signal)) {
1884 tsk->flags |= PF_EXITING;
1885 return;
1886 }
1887
1888 spin_lock_irq(&tsk->sighand->siglock);
1889
1890
1891
1892
1893 tsk->flags |= PF_EXITING;
1894 if (!signal_pending(tsk))
1895 goto out;
1896
1897
1898
1899
1900
1901 for (t = tsk; (t = next_thread(t)) != tsk; )
1902 if (!signal_pending(t) && !(t->flags & PF_EXITING))
1903 recalc_sigpending_and_wake(t);
1904
1905 if (unlikely(tsk->signal->group_stop_count) &&
1906 !--tsk->signal->group_stop_count) {
1907 tsk->signal->flags = SIGNAL_STOP_STOPPED;
1908 group_stop = 1;
1909 }
1910out:
1911 spin_unlock_irq(&tsk->sighand->siglock);
1912
1913 if (unlikely(group_stop)) {
1914 read_lock(&tasklist_lock);
1915 do_notify_parent_cldstop(tsk, CLD_STOPPED);
1916 read_unlock(&tasklist_lock);
1917 }
1918}
1919
1920EXPORT_SYMBOL(recalc_sigpending);
1921EXPORT_SYMBOL_GPL(dequeue_signal);
1922EXPORT_SYMBOL(flush_signals);
1923EXPORT_SYMBOL(force_sig);
1924EXPORT_SYMBOL(kill_proc);
1925EXPORT_SYMBOL(ptrace_notify);
1926EXPORT_SYMBOL(send_sig);
1927EXPORT_SYMBOL(send_sig_info);
1928EXPORT_SYMBOL(sigprocmask);
1929EXPORT_SYMBOL(block_all_signals);
1930EXPORT_SYMBOL(unblock_all_signals);
1931
1932
1933
1934
1935
1936
1937asmlinkage long sys_restart_syscall(void)
1938{
1939 struct restart_block *restart = ¤t_thread_info()->restart_block;
1940 return restart->fn(restart);
1941}
1942
1943long do_no_restart_syscall(struct restart_block *param)
1944{
1945 return -EINTR;
1946}
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962int sigprocmask(int how, sigset_t *set, sigset_t *oldset)
1963{
1964 int error;
1965
1966 spin_lock_irq(¤t->sighand->siglock);
1967 if (oldset)
1968 *oldset = current->blocked;
1969
1970 error = 0;
1971 switch (how) {
1972 case SIG_BLOCK:
1973 sigorsets(¤t->blocked, ¤t->blocked, set);
1974 break;
1975 case SIG_UNBLOCK:
1976 signandsets(¤t->blocked, ¤t->blocked, set);
1977 break;
1978 case SIG_SETMASK:
1979 current->blocked = *set;
1980 break;
1981 default:
1982 error = -EINVAL;
1983 }
1984 recalc_sigpending();
1985 spin_unlock_irq(¤t->sighand->siglock);
1986
1987 return error;
1988}
1989
1990asmlinkage long
1991sys_rt_sigprocmask(int how, sigset_t __user *set, sigset_t __user *oset, size_t sigsetsize)
1992{
1993 int error = -EINVAL;
1994 sigset_t old_set, new_set;
1995
1996
1997 if (sigsetsize != sizeof(sigset_t))
1998 goto out;
1999
2000 if (set) {
2001 error = -EFAULT;
2002 if (copy_from_user(&new_set, set, sizeof(*set)))
2003 goto out;
2004 sigdelsetmask(&new_set, sigmask(SIGKILL)|sigmask(SIGSTOP));
2005
2006 error = sigprocmask(how, &new_set, &old_set);
2007 if (error)
2008 goto out;
2009 if (oset)
2010 goto set_old;
2011 } else if (oset) {
2012 spin_lock_irq(¤t->sighand->siglock);
2013 old_set = current->blocked;
2014 spin_unlock_irq(¤t->sighand->siglock);
2015
2016 set_old:
2017 error = -EFAULT;
2018 if (copy_to_user(oset, &old_set, sizeof(*oset)))
2019 goto out;
2020 }
2021 error = 0;
2022out:
2023 return error;
2024}
2025
2026long do_sigpending(void __user *set, unsigned long sigsetsize)
2027{
2028 long error = -EINVAL;
2029 sigset_t pending;
2030
2031 if (sigsetsize > sizeof(sigset_t))
2032 goto out;
2033
2034 spin_lock_irq(¤t->sighand->siglock);
2035 sigorsets(&pending, ¤t->pending.signal,
2036 ¤t->signal->shared_pending.signal);
2037 spin_unlock_irq(¤t->sighand->siglock);
2038
2039
2040 sigandsets(&pending, ¤t->blocked, &pending);
2041
2042 error = -EFAULT;
2043 if (!copy_to_user(set, &pending, sigsetsize))
2044 error = 0;
2045
2046out:
2047 return error;
2048}
2049
2050asmlinkage long
2051sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize)
2052{
2053 return do_sigpending(set, sigsetsize);
2054}
2055
2056#ifndef HAVE_ARCH_COPY_SIGINFO_TO_USER
2057
2058int copy_siginfo_to_user(siginfo_t __user *to, siginfo_t *from)
2059{
2060 int err;
2061
2062 if (!access_ok (VERIFY_WRITE, to, sizeof(siginfo_t)))
2063 return -EFAULT;
2064 if (from->si_code < 0)
2065 return __copy_to_user(to, from, sizeof(siginfo_t))
2066 ? -EFAULT : 0;
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076 err = __put_user(from->si_signo, &to->si_signo);
2077 err |= __put_user(from->si_errno, &to->si_errno);
2078 err |= __put_user((short)from->si_code, &to->si_code);
2079 switch (from->si_code & __SI_MASK) {
2080 case __SI_KILL:
2081 err |= __put_user(from->si_pid, &to->si_pid);
2082 err |= __put_user(from->si_uid, &to->si_uid);
2083 break;
2084 case __SI_TIMER:
2085 err |= __put_user(from->si_tid, &to->si_tid);
2086 err |= __put_user(from->si_overrun, &to->si_overrun);
2087 err |= __put_user(from->si_ptr, &to->si_ptr);
2088 break;
2089 case __SI_POLL:
2090 err |= __put_user(from->si_band, &to->si_band);
2091 err |= __put_user(from->si_fd, &to->si_fd);
2092 break;
2093 case __SI_FAULT:
2094 err |= __put_user(from->si_addr, &to->si_addr);
2095#ifdef __ARCH_SI_TRAPNO
2096 err |= __put_user(from->si_trapno, &to->si_trapno);
2097#endif
2098 break;
2099 case __SI_CHLD:
2100 err |= __put_user(from->si_pid, &to->si_pid);
2101 err |= __put_user(from->si_uid, &to->si_uid);
2102 err |= __put_user(from->si_status, &to->si_status);
2103 err |= __put_user(from->si_utime, &to->si_utime);
2104 err |= __put_user(from->si_stime, &to->si_stime);
2105 break;
2106 case __SI_RT:
2107 case __SI_MESGQ:
2108 err |= __put_user(from->si_pid, &to->si_pid);
2109 err |= __put_user(from->si_uid, &to->si_uid);
2110 err |= __put_user(from->si_ptr, &to->si_ptr);
2111 break;
2112 default:
2113 err |= __put_user(from->si_pid, &to->si_pid);
2114 err |= __put_user(from->si_uid, &to->si_uid);
2115 break;
2116 }
2117 return err;
2118}
2119
2120#endif
2121
2122asmlinkage long
2123sys_rt_sigtimedwait(const sigset_t __user *uthese,
2124 siginfo_t __user *uinfo,
2125 const struct timespec __user *uts,
2126 size_t sigsetsize)
2127{
2128 int ret, sig;
2129 sigset_t these;
2130 struct timespec ts;
2131 siginfo_t info;
2132 long timeout = 0;
2133
2134
2135 if (sigsetsize != sizeof(sigset_t))
2136 return -EINVAL;
2137
2138 if (copy_from_user(&these, uthese, sizeof(these)))
2139 return -EFAULT;
2140
2141
2142
2143
2144
2145 sigdelsetmask(&these, sigmask(SIGKILL)|sigmask(SIGSTOP));
2146 signotset(&these);
2147
2148 if (uts) {
2149 if (copy_from_user(&ts, uts, sizeof(ts)))
2150 return -EFAULT;
2151 if (ts.tv_nsec >= 1000000000L || ts.tv_nsec < 0
2152 || ts.tv_sec < 0)
2153 return -EINVAL;
2154 }
2155
2156 spin_lock_irq(¤t->sighand->siglock);
2157 sig = dequeue_signal(current, &these, &info);
2158 if (!sig) {
2159 timeout = MAX_SCHEDULE_TIMEOUT;
2160 if (uts)
2161 timeout = (timespec_to_jiffies(&ts)
2162 + (ts.tv_sec || ts.tv_nsec));
2163
2164 if (timeout) {
2165
2166
2167
2168 current->real_blocked = current->blocked;
2169 sigandsets(¤t->blocked, ¤t->blocked, &these);
2170 recalc_sigpending();
2171 spin_unlock_irq(¤t->sighand->siglock);
2172
2173 timeout = schedule_timeout_interruptible(timeout);
2174
2175 spin_lock_irq(¤t->sighand->siglock);
2176 sig = dequeue_signal(current, &these, &info);
2177 current->blocked = current->real_blocked;
2178 siginitset(¤t->real_blocked, 0);
2179 recalc_sigpending();
2180 }
2181 }
2182 spin_unlock_irq(¤t->sighand->siglock);
2183
2184 if (sig) {
2185 ret = sig;
2186 if (uinfo) {
2187 if (copy_siginfo_to_user(uinfo, &info))
2188 ret = -EFAULT;
2189 }
2190 } else {
2191 ret = -EAGAIN;
2192 if (timeout)
2193 ret = -EINTR;
2194 }
2195
2196 return ret;
2197}
2198
2199asmlinkage long
2200sys_kill(int pid, int sig)
2201{
2202 struct siginfo info;
2203
2204 info.si_signo = sig;
2205 info.si_errno = 0;
2206 info.si_code = SI_USER;
2207 info.si_pid = task_tgid_vnr(current);
2208 info.si_uid = current->uid;
2209
2210 return kill_something_info(sig, &info, pid);
2211}
2212
2213static int do_tkill(int tgid, int pid, int sig)
2214{
2215 int error;
2216 struct siginfo info;
2217 struct task_struct *p;
2218 unsigned long flags;
2219
2220 error = -ESRCH;
2221 info.si_signo = sig;
2222 info.si_errno = 0;
2223 info.si_code = SI_TKILL;
2224 info.si_pid = task_tgid_vnr(current);
2225 info.si_uid = current->uid;
2226
2227 rcu_read_lock();
2228 p = find_task_by_vpid(pid);
2229 if (p && (tgid <= 0 || task_tgid_vnr(p) == tgid)) {
2230 error = check_kill_permission(sig, &info, p);
2231
2232
2233
2234
2235
2236
2237
2238
2239 if (!error && sig && lock_task_sighand(p, &flags)) {
2240 error = specific_send_sig_info(sig, &info, p);
2241 unlock_task_sighand(p, &flags);
2242 }
2243 }
2244 rcu_read_unlock();
2245
2246 return error;
2247}
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259asmlinkage long sys_tgkill(int tgid, int pid, int sig)
2260{
2261
2262 if (pid <= 0 || tgid <= 0)
2263 return -EINVAL;
2264
2265 return do_tkill(tgid, pid, sig);
2266}
2267
2268
2269
2270
2271asmlinkage long
2272sys_tkill(int pid, int sig)
2273{
2274
2275 if (pid <= 0)
2276 return -EINVAL;
2277
2278 return do_tkill(0, pid, sig);
2279}
2280
2281asmlinkage long
2282sys_rt_sigqueueinfo(int pid, int sig, siginfo_t __user *uinfo)
2283{
2284 siginfo_t info;
2285
2286 if (copy_from_user(&info, uinfo, sizeof(siginfo_t)))
2287 return -EFAULT;
2288
2289
2290
2291 if (info.si_code >= 0)
2292 return -EPERM;
2293 info.si_signo = sig;
2294
2295
2296 return kill_proc_info(sig, &info, pid);
2297}
2298
2299int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact)
2300{
2301 struct task_struct *t = current;
2302 struct k_sigaction *k;
2303 sigset_t mask;
2304
2305 if (!valid_signal(sig) || sig < 1 || (act && sig_kernel_only(sig)))
2306 return -EINVAL;
2307
2308 k = &t->sighand->action[sig-1];
2309
2310 spin_lock_irq(¤t->sighand->siglock);
2311 if (oact)
2312 *oact = *k;
2313
2314 if (act) {
2315 sigdelsetmask(&act->sa.sa_mask,
2316 sigmask(SIGKILL) | sigmask(SIGSTOP));
2317 *k = *act;
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329 if (__sig_ignored(t, sig)) {
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(¤t->sighand->siglock);
2341 return 0;
2342}
2343
2344int
2345do_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
2376
2377
2378
2379
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;
2404out:
2405 return error;
2406}
2407
2408#ifdef __ARCH_WANT_SYS_SIGPENDING
2409
2410asmlinkage long
2411sys_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
2420
2421
2422asmlinkage long
2423sys_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(¤t->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(¤t->blocked, new_set);
2444 break;
2445 case SIG_UNBLOCK:
2446 sigdelsetmask(¤t->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(¤t->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;
2467out:
2468 return error;
2469}
2470#endif
2471
2472#ifdef __ARCH_WANT_SYS_RT_SIGACTION
2473asmlinkage long
2474sys_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
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 }
2497out:
2498 return ret;
2499}
2500#endif
2501
2502#ifdef __ARCH_WANT_SYS_SGETMASK
2503
2504
2505
2506
2507asmlinkage long
2508sys_sgetmask(void)
2509{
2510
2511 return current->blocked.sig[0];
2512}
2513
2514asmlinkage long
2515sys_ssetmask(int newmask)
2516{
2517 int old;
2518
2519 spin_lock_irq(¤t->sighand->siglock);
2520 old = current->blocked.sig[0];
2521
2522 siginitset(¤t->blocked, newmask & ~(sigmask(SIGKILL)|
2523 sigmask(SIGSTOP)));
2524 recalc_sigpending();
2525 spin_unlock_irq(¤t->sighand->siglock);
2526
2527 return old;
2528}
2529#endif
2530
2531#ifdef __ARCH_WANT_SYS_SIGNAL
2532
2533
2534
2535asmlinkage unsigned long
2536sys_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
2550
2551#ifdef __ARCH_WANT_SYS_PAUSE
2552
2553asmlinkage long
2554sys_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
2564asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize)
2565{
2566 sigset_t newset;
2567
2568
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(¤t->sighand->siglock);
2577 current->saved_sigmask = current->blocked;
2578 current->blocked = newset;
2579 recalc_sigpending();
2580 spin_unlock_irq(¤t->sighand->siglock);
2581
2582 current->state = TASK_INTERRUPTIBLE;
2583 schedule();
2584 set_restore_sigmask();
2585 return -ERESTARTNOHAND;
2586}
2587#endif
2588
2589__attribute__((weak)) const char *arch_vma_name(struct vm_area_struct *vma)
2590{
2591 return NULL;
2592}
2593
2594void __init signals_init(void)
2595{
2596 sigqueue_cachep = KMEM_CACHE(sigqueue, SLAB_PANIC);
2597}
2598