1
2
3
4
5
6
7#include <linux/mm.h>
8#include <linux/slab.h>
9#include <linux/interrupt.h>
10#include <linux/module.h>
11#include <linux/capability.h>
12#include <linux/completion.h>
13#include <linux/personality.h>
14#include <linux/tty.h>
15#include <linux/iocontext.h>
16#include <linux/key.h>
17#include <linux/security.h>
18#include <linux/cpu.h>
19#include <linux/acct.h>
20#include <linux/tsacct_kern.h>
21#include <linux/file.h>
22#include <linux/fdtable.h>
23#include <linux/freezer.h>
24#include <linux/binfmts.h>
25#include <linux/nsproxy.h>
26#include <linux/pid_namespace.h>
27#include <linux/ptrace.h>
28#include <linux/profile.h>
29#include <linux/mount.h>
30#include <linux/proc_fs.h>
31#include <linux/kthread.h>
32#include <linux/mempolicy.h>
33#include <linux/taskstats_kern.h>
34#include <linux/delayacct.h>
35#include <linux/cgroup.h>
36#include <linux/syscalls.h>
37#include <linux/signal.h>
38#include <linux/posix-timers.h>
39#include <linux/cn_proc.h>
40#include <linux/mutex.h>
41#include <linux/futex.h>
42#include <linux/pipe_fs_i.h>
43#include <linux/audit.h>
44#include <linux/resource.h>
45#include <linux/blkdev.h>
46#include <linux/task_io_accounting_ops.h>
47#include <linux/tracehook.h>
48#include <linux/fs_struct.h>
49#include <linux/init_task.h>
50#include <linux/perf_event.h>
51#include <trace/events/sched.h>
52#include <linux/hw_breakpoint.h>
53#include <linux/oom.h>
54#include <linux/writeback.h>
55#include <linux/shm.h>
56#include <linux/kcov.h>
57
58#include <asm/uaccess.h>
59#include <asm/unistd.h>
60#include <asm/pgtable.h>
61#include <asm/mmu_context.h>
62
63static void __unhash_process(struct task_struct *p, bool group_dead)
64{
65 nr_threads--;
66 detach_pid(p, PIDTYPE_PID);
67 if (group_dead) {
68 detach_pid(p, PIDTYPE_PGID);
69 detach_pid(p, PIDTYPE_SID);
70
71 list_del_rcu(&p->tasks);
72 list_del_init(&p->sibling);
73 __this_cpu_dec(process_counts);
74 }
75 list_del_rcu(&p->thread_group);
76 list_del_rcu(&p->thread_node);
77}
78
79
80
81
82static void __exit_signal(struct task_struct *tsk)
83{
84 struct signal_struct *sig = tsk->signal;
85 bool group_dead = thread_group_leader(tsk);
86 struct sighand_struct *sighand;
87 struct tty_struct *uninitialized_var(tty);
88 cputime_t utime, stime;
89
90 sighand = rcu_dereference_check(tsk->sighand,
91 lockdep_tasklist_lock_is_held());
92 spin_lock(&sighand->siglock);
93
94 posix_cpu_timers_exit(tsk);
95 if (group_dead) {
96 posix_cpu_timers_exit_group(tsk);
97 tty = sig->tty;
98 sig->tty = NULL;
99 } else {
100
101
102
103
104
105 if (unlikely(has_group_leader_pid(tsk)))
106 posix_cpu_timers_exit_group(tsk);
107
108
109
110
111
112 if (sig->notify_count > 0 && !--sig->notify_count)
113 wake_up_process(sig->group_exit_task);
114
115 if (tsk == sig->curr_target)
116 sig->curr_target = next_thread(tsk);
117 }
118
119
120
121
122
123
124
125 task_cputime(tsk, &utime, &stime);
126 write_seqlock(&sig->stats_lock);
127 sig->utime += utime;
128 sig->stime += stime;
129 sig->gtime += task_gtime(tsk);
130 sig->min_flt += tsk->min_flt;
131 sig->maj_flt += tsk->maj_flt;
132 sig->nvcsw += tsk->nvcsw;
133 sig->nivcsw += tsk->nivcsw;
134 sig->inblock += task_io_get_inblock(tsk);
135 sig->oublock += task_io_get_oublock(tsk);
136 task_io_accounting_add(&sig->ioac, &tsk->ioac);
137 sig->sum_sched_runtime += tsk->se.sum_exec_runtime;
138 sig->nr_threads--;
139 __unhash_process(tsk, group_dead);
140 write_sequnlock(&sig->stats_lock);
141
142
143
144
145
146 flush_sigqueue(&tsk->pending);
147 tsk->sighand = NULL;
148 spin_unlock(&sighand->siglock);
149
150 __cleanup_sighand(sighand);
151 clear_tsk_thread_flag(tsk, TIF_SIGPENDING);
152 if (group_dead) {
153 flush_sigqueue(&sig->shared_pending);
154 tty_kref_put(tty);
155 }
156}
157
158static void delayed_put_task_struct(struct rcu_head *rhp)
159{
160 struct task_struct *tsk = container_of(rhp, struct task_struct, rcu);
161
162 perf_event_delayed_put(tsk);
163 trace_sched_process_free(tsk);
164 put_task_struct(tsk);
165}
166
167
168void release_task(struct task_struct *p)
169{
170 struct task_struct *leader;
171 int zap_leader;
172repeat:
173
174
175 rcu_read_lock();
176 atomic_dec(&__task_cred(p)->user->processes);
177 rcu_read_unlock();
178
179 proc_flush_task(p);
180
181 write_lock_irq(&tasklist_lock);
182 ptrace_release_task(p);
183 __exit_signal(p);
184
185
186
187
188
189
190 zap_leader = 0;
191 leader = p->group_leader;
192 if (leader != p && thread_group_empty(leader)
193 && leader->exit_state == EXIT_ZOMBIE) {
194
195
196
197
198
199 zap_leader = do_notify_parent(leader, leader->exit_signal);
200 if (zap_leader)
201 leader->exit_state = EXIT_DEAD;
202 }
203
204 write_unlock_irq(&tasklist_lock);
205 release_thread(p);
206 call_rcu(&p->rcu, delayed_put_task_struct);
207
208 p = leader;
209 if (unlikely(zap_leader))
210 goto repeat;
211}
212
213
214
215
216
217struct task_struct *task_rcu_dereference(struct task_struct **ptask)
218{
219 struct sighand_struct *sighand;
220 struct task_struct *task;
221
222
223
224
225
226
227
228retry:
229 task = rcu_dereference(*ptask);
230 if (!task)
231 return NULL;
232
233 probe_kernel_address(&task->sighand, sighand);
234
235
236
237
238
239
240 smp_rmb();
241 if (unlikely(task != READ_ONCE(*ptask)))
242 goto retry;
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270 if (!sighand)
271 return NULL;
272
273 return task;
274}
275
276struct task_struct *try_get_task_struct(struct task_struct **ptask)
277{
278 struct task_struct *task;
279
280 rcu_read_lock();
281 task = task_rcu_dereference(ptask);
282 if (task)
283 get_task_struct(task);
284 rcu_read_unlock();
285
286 return task;
287}
288
289
290
291
292
293
294
295
296
297static int will_become_orphaned_pgrp(struct pid *pgrp,
298 struct task_struct *ignored_task)
299{
300 struct task_struct *p;
301
302 do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
303 if ((p == ignored_task) ||
304 (p->exit_state && thread_group_empty(p)) ||
305 is_global_init(p->real_parent))
306 continue;
307
308 if (task_pgrp(p->real_parent) != pgrp &&
309 task_session(p->real_parent) == task_session(p))
310 return 0;
311 } while_each_pid_task(pgrp, PIDTYPE_PGID, p);
312
313 return 1;
314}
315
316int is_current_pgrp_orphaned(void)
317{
318 int retval;
319
320 read_lock(&tasklist_lock);
321 retval = will_become_orphaned_pgrp(task_pgrp(current), NULL);
322 read_unlock(&tasklist_lock);
323
324 return retval;
325}
326
327static bool has_stopped_jobs(struct pid *pgrp)
328{
329 struct task_struct *p;
330
331 do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
332 if (p->signal->flags & SIGNAL_STOP_STOPPED)
333 return true;
334 } while_each_pid_task(pgrp, PIDTYPE_PGID, p);
335
336 return false;
337}
338
339
340
341
342
343
344static void
345kill_orphaned_pgrp(struct task_struct *tsk, struct task_struct *parent)
346{
347 struct pid *pgrp = task_pgrp(tsk);
348 struct task_struct *ignored_task = tsk;
349
350 if (!parent)
351
352
353
354 parent = tsk->real_parent;
355 else
356
357
358
359 ignored_task = NULL;
360
361 if (task_pgrp(parent) != pgrp &&
362 task_session(parent) == task_session(tsk) &&
363 will_become_orphaned_pgrp(pgrp, ignored_task) &&
364 has_stopped_jobs(pgrp)) {
365 __kill_pgrp_info(SIGHUP, SEND_SIG_PRIV, pgrp);
366 __kill_pgrp_info(SIGCONT, SEND_SIG_PRIV, pgrp);
367 }
368}
369
370#ifdef CONFIG_MEMCG
371
372
373
374void mm_update_next_owner(struct mm_struct *mm)
375{
376 struct task_struct *c, *g, *p = current;
377
378retry:
379
380
381
382
383 if (mm->owner != p)
384 return;
385
386
387
388
389
390 if (atomic_read(&mm->mm_users) <= 1) {
391 mm->owner = NULL;
392 return;
393 }
394
395 read_lock(&tasklist_lock);
396
397
398
399 list_for_each_entry(c, &p->children, sibling) {
400 if (c->mm == mm)
401 goto assign_new_owner;
402 }
403
404
405
406
407 list_for_each_entry(c, &p->real_parent->children, sibling) {
408 if (c->mm == mm)
409 goto assign_new_owner;
410 }
411
412
413
414
415 for_each_process(g) {
416 if (g->flags & PF_KTHREAD)
417 continue;
418 for_each_thread(g, c) {
419 if (c->mm == mm)
420 goto assign_new_owner;
421 if (c->mm)
422 break;
423 }
424 }
425 read_unlock(&tasklist_lock);
426
427
428
429
430
431 mm->owner = NULL;
432 return;
433
434assign_new_owner:
435 BUG_ON(c == p);
436 get_task_struct(c);
437
438
439
440
441 task_lock(c);
442
443
444
445
446 read_unlock(&tasklist_lock);
447 if (c->mm != mm) {
448 task_unlock(c);
449 put_task_struct(c);
450 goto retry;
451 }
452 mm->owner = c;
453 task_unlock(c);
454 put_task_struct(c);
455}
456#endif
457
458
459
460
461
462static void exit_mm(struct task_struct *tsk)
463{
464 struct mm_struct *mm = tsk->mm;
465 struct core_state *core_state;
466
467 mm_release(tsk, mm);
468 if (!mm)
469 return;
470 sync_mm_rss(mm);
471
472
473
474
475
476
477
478 down_read(&mm->mmap_sem);
479 core_state = mm->core_state;
480 if (core_state) {
481 struct core_thread self;
482
483 up_read(&mm->mmap_sem);
484
485 self.task = tsk;
486 self.next = xchg(&core_state->dumper.next, &self);
487
488
489
490
491 if (atomic_dec_and_test(&core_state->nr_threads))
492 complete(&core_state->startup);
493
494 for (;;) {
495 set_task_state(tsk, TASK_UNINTERRUPTIBLE);
496 if (!self.task)
497 break;
498 freezable_schedule();
499 }
500 __set_task_state(tsk, TASK_RUNNING);
501 down_read(&mm->mmap_sem);
502 }
503 atomic_inc(&mm->mm_count);
504 BUG_ON(mm != tsk->active_mm);
505
506 task_lock(tsk);
507 tsk->mm = NULL;
508 up_read(&mm->mmap_sem);
509 enter_lazy_tlb(mm, current);
510 task_unlock(tsk);
511 mm_update_next_owner(mm);
512 mmput(mm);
513 if (test_thread_flag(TIF_MEMDIE))
514 exit_oom_victim();
515}
516
517static struct task_struct *find_alive_thread(struct task_struct *p)
518{
519 struct task_struct *t;
520
521 for_each_thread(p, t) {
522 if (!(t->flags & PF_EXITING))
523 return t;
524 }
525 return NULL;
526}
527
528static struct task_struct *find_child_reaper(struct task_struct *father)
529 __releases(&tasklist_lock)
530 __acquires(&tasklist_lock)
531{
532 struct pid_namespace *pid_ns = task_active_pid_ns(father);
533 struct task_struct *reaper = pid_ns->child_reaper;
534
535 if (likely(reaper != father))
536 return reaper;
537
538 reaper = find_alive_thread(father);
539 if (reaper) {
540 pid_ns->child_reaper = reaper;
541 return reaper;
542 }
543
544 write_unlock_irq(&tasklist_lock);
545 if (unlikely(pid_ns == &init_pid_ns)) {
546 panic("Attempted to kill init! exitcode=0x%08x\n",
547 father->signal->group_exit_code ?: father->exit_code);
548 }
549 zap_pid_ns_processes(pid_ns);
550 write_lock_irq(&tasklist_lock);
551
552 return father;
553}
554
555
556
557
558
559
560
561
562static struct task_struct *find_new_reaper(struct task_struct *father,
563 struct task_struct *child_reaper)
564{
565 struct task_struct *thread, *reaper;
566
567 thread = find_alive_thread(father);
568 if (thread)
569 return thread;
570
571 if (father->signal->has_child_subreaper) {
572
573
574
575
576
577 for (reaper = father;
578 !same_thread_group(reaper, child_reaper);
579 reaper = reaper->real_parent) {
580
581 if (reaper == &init_task)
582 break;
583 if (!reaper->signal->is_child_subreaper)
584 continue;
585 thread = find_alive_thread(reaper);
586 if (thread)
587 return thread;
588 }
589 }
590
591 return child_reaper;
592}
593
594
595
596
597static void reparent_leader(struct task_struct *father, struct task_struct *p,
598 struct list_head *dead)
599{
600 if (unlikely(p->exit_state == EXIT_DEAD))
601 return;
602
603
604 p->exit_signal = SIGCHLD;
605
606
607 if (!p->ptrace &&
608 p->exit_state == EXIT_ZOMBIE && thread_group_empty(p)) {
609 if (do_notify_parent(p, p->exit_signal)) {
610 p->exit_state = EXIT_DEAD;
611 list_add(&p->ptrace_entry, dead);
612 }
613 }
614
615 kill_orphaned_pgrp(p, father);
616}
617
618
619
620
621
622
623
624
625
626static void forget_original_parent(struct task_struct *father,
627 struct list_head *dead)
628{
629 struct task_struct *p, *t, *reaper;
630
631 if (unlikely(!list_empty(&father->ptraced)))
632 exit_ptrace(father, dead);
633
634
635 reaper = find_child_reaper(father);
636 if (list_empty(&father->children))
637 return;
638
639 reaper = find_new_reaper(father, reaper);
640 list_for_each_entry(p, &father->children, sibling) {
641 for_each_thread(p, t) {
642 t->real_parent = reaper;
643 BUG_ON((!t->ptrace) != (t->parent == father));
644 if (likely(!t->ptrace))
645 t->parent = t->real_parent;
646 if (t->pdeath_signal)
647 group_send_sig_info(t->pdeath_signal,
648 SEND_SIG_NOINFO, t);
649 }
650
651
652
653
654 if (!same_thread_group(reaper, father))
655 reparent_leader(father, p, dead);
656 }
657 list_splice_tail_init(&father->children, &reaper->children);
658}
659
660
661
662
663
664static void exit_notify(struct task_struct *tsk, int group_dead)
665{
666 bool autoreap;
667 struct task_struct *p, *n;
668 LIST_HEAD(dead);
669
670 write_lock_irq(&tasklist_lock);
671 forget_original_parent(tsk, &dead);
672
673 if (group_dead)
674 kill_orphaned_pgrp(tsk->group_leader, NULL);
675
676 if (unlikely(tsk->ptrace)) {
677 int sig = thread_group_leader(tsk) &&
678 thread_group_empty(tsk) &&
679 !ptrace_reparented(tsk) ?
680 tsk->exit_signal : SIGCHLD;
681 autoreap = do_notify_parent(tsk, sig);
682 } else if (thread_group_leader(tsk)) {
683 autoreap = thread_group_empty(tsk) &&
684 do_notify_parent(tsk, tsk->exit_signal);
685 } else {
686 autoreap = true;
687 }
688
689 tsk->exit_state = autoreap ? EXIT_DEAD : EXIT_ZOMBIE;
690 if (tsk->exit_state == EXIT_DEAD)
691 list_add(&tsk->ptrace_entry, &dead);
692
693
694 if (unlikely(tsk->signal->notify_count < 0))
695 wake_up_process(tsk->signal->group_exit_task);
696 write_unlock_irq(&tasklist_lock);
697
698 list_for_each_entry_safe(p, n, &dead, ptrace_entry) {
699 list_del_init(&p->ptrace_entry);
700 release_task(p);
701 }
702}
703
704#ifdef CONFIG_DEBUG_STACK_USAGE
705static void check_stack_usage(void)
706{
707 static DEFINE_SPINLOCK(low_water_lock);
708 static int lowest_to_date = THREAD_SIZE;
709 unsigned long free;
710
711 free = stack_not_used(current);
712
713 if (free >= lowest_to_date)
714 return;
715
716 spin_lock(&low_water_lock);
717 if (free < lowest_to_date) {
718 pr_info("%s (%d) used greatest stack depth: %lu bytes left\n",
719 current->comm, task_pid_nr(current), free);
720 lowest_to_date = free;
721 }
722 spin_unlock(&low_water_lock);
723}
724#else
725static inline void check_stack_usage(void) {}
726#endif
727
728void __noreturn do_exit(long code)
729{
730 struct task_struct *tsk = current;
731 int group_dead;
732 TASKS_RCU(int tasks_rcu_i);
733
734 profile_task_exit(tsk);
735 kcov_task_exit(tsk);
736
737 WARN_ON(blk_needs_flush_plug(tsk));
738
739 if (unlikely(in_interrupt()))
740 panic("Aiee, killing interrupt handler!");
741 if (unlikely(!tsk->pid))
742 panic("Attempted to kill the idle task!");
743
744
745
746
747
748
749
750
751 set_fs(USER_DS);
752
753 ptrace_event(PTRACE_EVENT_EXIT, code);
754
755 validate_creds_for_do_exit(tsk);
756
757
758
759
760
761 if (unlikely(tsk->flags & PF_EXITING)) {
762 pr_alert("Fixing recursive fault but reboot is needed!\n");
763
764
765
766
767
768
769
770
771
772 tsk->flags |= PF_EXITPIDONE;
773 set_current_state(TASK_UNINTERRUPTIBLE);
774 schedule();
775 }
776
777 exit_signals(tsk);
778
779
780
781
782 smp_mb();
783
784
785
786
787 raw_spin_unlock_wait(&tsk->pi_lock);
788
789 if (unlikely(in_atomic())) {
790 pr_info("note: %s[%d] exited with preempt_count %d\n",
791 current->comm, task_pid_nr(current),
792 preempt_count());
793 preempt_count_set(PREEMPT_ENABLED);
794 }
795
796
797 if (tsk->mm)
798 sync_mm_rss(tsk->mm);
799 acct_update_integrals(tsk);
800 group_dead = atomic_dec_and_test(&tsk->signal->live);
801 if (group_dead) {
802 hrtimer_cancel(&tsk->signal->real_timer);
803 exit_itimers(tsk->signal);
804 if (tsk->mm)
805 setmax_mm_hiwater_rss(&tsk->signal->maxrss, tsk->mm);
806 }
807 acct_collect(code, group_dead);
808 if (group_dead)
809 tty_audit_exit();
810 audit_free(tsk);
811
812 tsk->exit_code = code;
813 taskstats_exit(tsk, group_dead);
814
815 exit_mm(tsk);
816
817 if (group_dead)
818 acct_process();
819 trace_sched_process_exit(tsk);
820
821 exit_sem(tsk);
822 exit_shm(tsk);
823 exit_files(tsk);
824 exit_fs(tsk);
825 if (group_dead)
826 disassociate_ctty(1);
827 exit_task_namespaces(tsk);
828 exit_task_work(tsk);
829 exit_thread(tsk);
830
831
832
833
834
835
836
837 perf_event_exit_task(tsk);
838
839 sched_autogroup_exit_task(tsk);
840 cgroup_exit(tsk);
841
842
843
844
845 flush_ptrace_hw_breakpoint(tsk);
846
847 TASKS_RCU(preempt_disable());
848 TASKS_RCU(tasks_rcu_i = __srcu_read_lock(&tasks_rcu_exit_srcu));
849 TASKS_RCU(preempt_enable());
850 exit_notify(tsk, group_dead);
851 proc_exit_connector(tsk);
852 mpol_put_task_policy(tsk);
853#ifdef CONFIG_FUTEX
854 if (unlikely(current->pi_state_cache))
855 kfree(current->pi_state_cache);
856#endif
857
858
859
860 debug_check_no_locks_held();
861
862
863
864
865
866 tsk->flags |= PF_EXITPIDONE;
867
868 if (tsk->io_context)
869 exit_io_context(tsk);
870
871 if (tsk->splice_pipe)
872 free_pipe_info(tsk->splice_pipe);
873
874 if (tsk->task_frag.page)
875 put_page(tsk->task_frag.page);
876
877 validate_creds_for_do_exit(tsk);
878
879 check_stack_usage();
880 preempt_disable();
881 if (tsk->nr_dirtied)
882 __this_cpu_add(dirty_throttle_leaks, tsk->nr_dirtied);
883 exit_rcu();
884 TASKS_RCU(__srcu_read_unlock(&tasks_rcu_exit_srcu, tasks_rcu_i));
885
886 do_task_dead();
887}
888EXPORT_SYMBOL_GPL(do_exit);
889
890void complete_and_exit(struct completion *comp, long code)
891{
892 if (comp)
893 complete(comp);
894
895 do_exit(code);
896}
897EXPORT_SYMBOL(complete_and_exit);
898
899SYSCALL_DEFINE1(exit, int, error_code)
900{
901 do_exit((error_code&0xff)<<8);
902}
903
904
905
906
907
908void
909do_group_exit(int exit_code)
910{
911 struct signal_struct *sig = current->signal;
912
913 BUG_ON(exit_code & 0x80);
914
915 if (signal_group_exit(sig))
916 exit_code = sig->group_exit_code;
917 else if (!thread_group_empty(current)) {
918 struct sighand_struct *const sighand = current->sighand;
919
920 spin_lock_irq(&sighand->siglock);
921 if (signal_group_exit(sig))
922
923 exit_code = sig->group_exit_code;
924 else {
925 sig->group_exit_code = exit_code;
926 sig->flags = SIGNAL_GROUP_EXIT;
927 zap_other_threads(current);
928 }
929 spin_unlock_irq(&sighand->siglock);
930 }
931
932 do_exit(exit_code);
933
934}
935
936
937
938
939
940
941SYSCALL_DEFINE1(exit_group, int, error_code)
942{
943 do_group_exit((error_code & 0xff) << 8);
944
945 return 0;
946}
947
948struct wait_opts {
949 enum pid_type wo_type;
950 int wo_flags;
951 struct pid *wo_pid;
952
953 struct siginfo __user *wo_info;
954 int __user *wo_stat;
955 struct rusage __user *wo_rusage;
956
957 wait_queue_t child_wait;
958 int notask_error;
959};
960
961static inline
962struct pid *task_pid_type(struct task_struct *task, enum pid_type type)
963{
964 if (type != PIDTYPE_PID)
965 task = task->group_leader;
966 return task->pids[type].pid;
967}
968
969static int eligible_pid(struct wait_opts *wo, struct task_struct *p)
970{
971 return wo->wo_type == PIDTYPE_MAX ||
972 task_pid_type(p, wo->wo_type) == wo->wo_pid;
973}
974
975static int
976eligible_child(struct wait_opts *wo, bool ptrace, struct task_struct *p)
977{
978 if (!eligible_pid(wo, p))
979 return 0;
980
981
982
983
984
985 if (ptrace || (wo->wo_flags & __WALL))
986 return 1;
987
988
989
990
991
992
993
994
995
996 if ((p->exit_signal != SIGCHLD) ^ !!(wo->wo_flags & __WCLONE))
997 return 0;
998
999 return 1;
1000}
1001
1002static int wait_noreap_copyout(struct wait_opts *wo, struct task_struct *p,
1003 pid_t pid, uid_t uid, int why, int status)
1004{
1005 struct siginfo __user *infop;
1006 int retval = wo->wo_rusage
1007 ? getrusage(p, RUSAGE_BOTH, wo->wo_rusage) : 0;
1008
1009 put_task_struct(p);
1010 infop = wo->wo_info;
1011 if (infop) {
1012 if (!retval)
1013 retval = put_user(SIGCHLD, &infop->si_signo);
1014 if (!retval)
1015 retval = put_user(0, &infop->si_errno);
1016 if (!retval)
1017 retval = put_user((short)why, &infop->si_code);
1018 if (!retval)
1019 retval = put_user(pid, &infop->si_pid);
1020 if (!retval)
1021 retval = put_user(uid, &infop->si_uid);
1022 if (!retval)
1023 retval = put_user(status, &infop->si_status);
1024 }
1025 if (!retval)
1026 retval = pid;
1027 return retval;
1028}
1029
1030
1031
1032
1033
1034
1035
1036static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
1037{
1038 int state, retval, status;
1039 pid_t pid = task_pid_vnr(p);
1040 uid_t uid = from_kuid_munged(current_user_ns(), task_uid(p));
1041 struct siginfo __user *infop;
1042
1043 if (!likely(wo->wo_flags & WEXITED))
1044 return 0;
1045
1046 if (unlikely(wo->wo_flags & WNOWAIT)) {
1047 int exit_code = p->exit_code;
1048 int why;
1049
1050 get_task_struct(p);
1051 read_unlock(&tasklist_lock);
1052 sched_annotate_sleep();
1053
1054 if ((exit_code & 0x7f) == 0) {
1055 why = CLD_EXITED;
1056 status = exit_code >> 8;
1057 } else {
1058 why = (exit_code & 0x80) ? CLD_DUMPED : CLD_KILLED;
1059 status = exit_code & 0x7f;
1060 }
1061 return wait_noreap_copyout(wo, p, pid, uid, why, status);
1062 }
1063
1064
1065
1066 state = (ptrace_reparented(p) && thread_group_leader(p)) ?
1067 EXIT_TRACE : EXIT_DEAD;
1068 if (cmpxchg(&p->exit_state, EXIT_ZOMBIE, state) != EXIT_ZOMBIE)
1069 return 0;
1070
1071
1072
1073 read_unlock(&tasklist_lock);
1074 sched_annotate_sleep();
1075
1076
1077
1078
1079 if (state == EXIT_DEAD && thread_group_leader(p)) {
1080 struct signal_struct *sig = p->signal;
1081 struct signal_struct *psig = current->signal;
1082 unsigned long maxrss;
1083 cputime_t tgutime, tgstime;
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105 thread_group_cputime_adjusted(p, &tgutime, &tgstime);
1106 spin_lock_irq(¤t->sighand->siglock);
1107 write_seqlock(&psig->stats_lock);
1108 psig->cutime += tgutime + sig->cutime;
1109 psig->cstime += tgstime + sig->cstime;
1110 psig->cgtime += task_gtime(p) + sig->gtime + sig->cgtime;
1111 psig->cmin_flt +=
1112 p->min_flt + sig->min_flt + sig->cmin_flt;
1113 psig->cmaj_flt +=
1114 p->maj_flt + sig->maj_flt + sig->cmaj_flt;
1115 psig->cnvcsw +=
1116 p->nvcsw + sig->nvcsw + sig->cnvcsw;
1117 psig->cnivcsw +=
1118 p->nivcsw + sig->nivcsw + sig->cnivcsw;
1119 psig->cinblock +=
1120 task_io_get_inblock(p) +
1121 sig->inblock + sig->cinblock;
1122 psig->coublock +=
1123 task_io_get_oublock(p) +
1124 sig->oublock + sig->coublock;
1125 maxrss = max(sig->maxrss, sig->cmaxrss);
1126 if (psig->cmaxrss < maxrss)
1127 psig->cmaxrss = maxrss;
1128 task_io_accounting_add(&psig->ioac, &p->ioac);
1129 task_io_accounting_add(&psig->ioac, &sig->ioac);
1130 write_sequnlock(&psig->stats_lock);
1131 spin_unlock_irq(¤t->sighand->siglock);
1132 }
1133
1134 retval = wo->wo_rusage
1135 ? getrusage(p, RUSAGE_BOTH, wo->wo_rusage) : 0;
1136 status = (p->signal->flags & SIGNAL_GROUP_EXIT)
1137 ? p->signal->group_exit_code : p->exit_code;
1138 if (!retval && wo->wo_stat)
1139 retval = put_user(status, wo->wo_stat);
1140
1141 infop = wo->wo_info;
1142 if (!retval && infop)
1143 retval = put_user(SIGCHLD, &infop->si_signo);
1144 if (!retval && infop)
1145 retval = put_user(0, &infop->si_errno);
1146 if (!retval && infop) {
1147 int why;
1148
1149 if ((status & 0x7f) == 0) {
1150 why = CLD_EXITED;
1151 status >>= 8;
1152 } else {
1153 why = (status & 0x80) ? CLD_DUMPED : CLD_KILLED;
1154 status &= 0x7f;
1155 }
1156 retval = put_user((short)why, &infop->si_code);
1157 if (!retval)
1158 retval = put_user(status, &infop->si_status);
1159 }
1160 if (!retval && infop)
1161 retval = put_user(pid, &infop->si_pid);
1162 if (!retval && infop)
1163 retval = put_user(uid, &infop->si_uid);
1164 if (!retval)
1165 retval = pid;
1166
1167 if (state == EXIT_TRACE) {
1168 write_lock_irq(&tasklist_lock);
1169
1170 ptrace_unlink(p);
1171
1172
1173 state = EXIT_ZOMBIE;
1174 if (do_notify_parent(p, p->exit_signal))
1175 state = EXIT_DEAD;
1176 p->exit_state = state;
1177 write_unlock_irq(&tasklist_lock);
1178 }
1179 if (state == EXIT_DEAD)
1180 release_task(p);
1181
1182 return retval;
1183}
1184
1185static int *task_stopped_code(struct task_struct *p, bool ptrace)
1186{
1187 if (ptrace) {
1188 if (task_is_traced(p) && !(p->jobctl & JOBCTL_LISTENING))
1189 return &p->exit_code;
1190 } else {
1191 if (p->signal->flags & SIGNAL_STOP_STOPPED)
1192 return &p->signal->group_exit_code;
1193 }
1194 return NULL;
1195}
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215static int wait_task_stopped(struct wait_opts *wo,
1216 int ptrace, struct task_struct *p)
1217{
1218 struct siginfo __user *infop;
1219 int retval, exit_code, *p_code, why;
1220 uid_t uid = 0;
1221 pid_t pid;
1222
1223
1224
1225
1226 if (!ptrace && !(wo->wo_flags & WUNTRACED))
1227 return 0;
1228
1229 if (!task_stopped_code(p, ptrace))
1230 return 0;
1231
1232 exit_code = 0;
1233 spin_lock_irq(&p->sighand->siglock);
1234
1235 p_code = task_stopped_code(p, ptrace);
1236 if (unlikely(!p_code))
1237 goto unlock_sig;
1238
1239 exit_code = *p_code;
1240 if (!exit_code)
1241 goto unlock_sig;
1242
1243 if (!unlikely(wo->wo_flags & WNOWAIT))
1244 *p_code = 0;
1245
1246 uid = from_kuid_munged(current_user_ns(), task_uid(p));
1247unlock_sig:
1248 spin_unlock_irq(&p->sighand->siglock);
1249 if (!exit_code)
1250 return 0;
1251
1252
1253
1254
1255
1256
1257
1258
1259 get_task_struct(p);
1260 pid = task_pid_vnr(p);
1261 why = ptrace ? CLD_TRAPPED : CLD_STOPPED;
1262 read_unlock(&tasklist_lock);
1263 sched_annotate_sleep();
1264
1265 if (unlikely(wo->wo_flags & WNOWAIT))
1266 return wait_noreap_copyout(wo, p, pid, uid, why, exit_code);
1267
1268 retval = wo->wo_rusage
1269 ? getrusage(p, RUSAGE_BOTH, wo->wo_rusage) : 0;
1270 if (!retval && wo->wo_stat)
1271 retval = put_user((exit_code << 8) | 0x7f, wo->wo_stat);
1272
1273 infop = wo->wo_info;
1274 if (!retval && infop)
1275 retval = put_user(SIGCHLD, &infop->si_signo);
1276 if (!retval && infop)
1277 retval = put_user(0, &infop->si_errno);
1278 if (!retval && infop)
1279 retval = put_user((short)why, &infop->si_code);
1280 if (!retval && infop)
1281 retval = put_user(exit_code, &infop->si_status);
1282 if (!retval && infop)
1283 retval = put_user(pid, &infop->si_pid);
1284 if (!retval && infop)
1285 retval = put_user(uid, &infop->si_uid);
1286 if (!retval)
1287 retval = pid;
1288 put_task_struct(p);
1289
1290 BUG_ON(!retval);
1291 return retval;
1292}
1293
1294
1295
1296
1297
1298
1299
1300static int wait_task_continued(struct wait_opts *wo, struct task_struct *p)
1301{
1302 int retval;
1303 pid_t pid;
1304 uid_t uid;
1305
1306 if (!unlikely(wo->wo_flags & WCONTINUED))
1307 return 0;
1308
1309 if (!(p->signal->flags & SIGNAL_STOP_CONTINUED))
1310 return 0;
1311
1312 spin_lock_irq(&p->sighand->siglock);
1313
1314 if (!(p->signal->flags & SIGNAL_STOP_CONTINUED)) {
1315 spin_unlock_irq(&p->sighand->siglock);
1316 return 0;
1317 }
1318 if (!unlikely(wo->wo_flags & WNOWAIT))
1319 p->signal->flags &= ~SIGNAL_STOP_CONTINUED;
1320 uid = from_kuid_munged(current_user_ns(), task_uid(p));
1321 spin_unlock_irq(&p->sighand->siglock);
1322
1323 pid = task_pid_vnr(p);
1324 get_task_struct(p);
1325 read_unlock(&tasklist_lock);
1326 sched_annotate_sleep();
1327
1328 if (!wo->wo_info) {
1329 retval = wo->wo_rusage
1330 ? getrusage(p, RUSAGE_BOTH, wo->wo_rusage) : 0;
1331 put_task_struct(p);
1332 if (!retval && wo->wo_stat)
1333 retval = put_user(0xffff, wo->wo_stat);
1334 if (!retval)
1335 retval = pid;
1336 } else {
1337 retval = wait_noreap_copyout(wo, p, pid, uid,
1338 CLD_CONTINUED, SIGCONT);
1339 BUG_ON(retval == 0);
1340 }
1341
1342 return retval;
1343}
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354static int wait_consider_task(struct wait_opts *wo, int ptrace,
1355 struct task_struct *p)
1356{
1357
1358
1359
1360
1361
1362 int exit_state = ACCESS_ONCE(p->exit_state);
1363 int ret;
1364
1365 if (unlikely(exit_state == EXIT_DEAD))
1366 return 0;
1367
1368 ret = eligible_child(wo, ptrace, p);
1369 if (!ret)
1370 return ret;
1371
1372 ret = security_task_wait(p);
1373 if (unlikely(ret < 0)) {
1374
1375
1376
1377
1378
1379
1380
1381 if (wo->notask_error)
1382 wo->notask_error = ret;
1383 return 0;
1384 }
1385
1386 if (unlikely(exit_state == EXIT_TRACE)) {
1387
1388
1389
1390
1391 if (likely(!ptrace))
1392 wo->notask_error = 0;
1393 return 0;
1394 }
1395
1396 if (likely(!ptrace) && unlikely(p->ptrace)) {
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408 if (!ptrace_reparented(p))
1409 ptrace = 1;
1410 }
1411
1412
1413 if (exit_state == EXIT_ZOMBIE) {
1414
1415 if (!delay_group_leader(p)) {
1416
1417
1418
1419
1420
1421 if (unlikely(ptrace) || likely(!p->ptrace))
1422 return wait_task_zombie(wo, p);
1423 }
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445 if (likely(!ptrace) || (wo->wo_flags & (WCONTINUED | WEXITED)))
1446 wo->notask_error = 0;
1447 } else {
1448
1449
1450
1451
1452 wo->notask_error = 0;
1453 }
1454
1455
1456
1457
1458
1459 ret = wait_task_stopped(wo, ptrace, p);
1460 if (ret)
1461 return ret;
1462
1463
1464
1465
1466
1467
1468 return wait_task_continued(wo, p);
1469}
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480static int do_wait_thread(struct wait_opts *wo, struct task_struct *tsk)
1481{
1482 struct task_struct *p;
1483
1484 list_for_each_entry(p, &tsk->children, sibling) {
1485 int ret = wait_consider_task(wo, 0, p);
1486
1487 if (ret)
1488 return ret;
1489 }
1490
1491 return 0;
1492}
1493
1494static int ptrace_do_wait(struct wait_opts *wo, struct task_struct *tsk)
1495{
1496 struct task_struct *p;
1497
1498 list_for_each_entry(p, &tsk->ptraced, ptrace_entry) {
1499 int ret = wait_consider_task(wo, 1, p);
1500
1501 if (ret)
1502 return ret;
1503 }
1504
1505 return 0;
1506}
1507
1508static int child_wait_callback(wait_queue_t *wait, unsigned mode,
1509 int sync, void *key)
1510{
1511 struct wait_opts *wo = container_of(wait, struct wait_opts,
1512 child_wait);
1513 struct task_struct *p = key;
1514
1515 if (!eligible_pid(wo, p))
1516 return 0;
1517
1518 if ((wo->wo_flags & __WNOTHREAD) && wait->private != p->parent)
1519 return 0;
1520
1521 return default_wake_function(wait, mode, sync, key);
1522}
1523
1524void __wake_up_parent(struct task_struct *p, struct task_struct *parent)
1525{
1526 __wake_up_sync_key(&parent->signal->wait_chldexit,
1527 TASK_INTERRUPTIBLE, 1, p);
1528}
1529
1530static long do_wait(struct wait_opts *wo)
1531{
1532 struct task_struct *tsk;
1533 int retval;
1534
1535 trace_sched_process_wait(wo->wo_pid);
1536
1537 init_waitqueue_func_entry(&wo->child_wait, child_wait_callback);
1538 wo->child_wait.private = current;
1539 add_wait_queue(¤t->signal->wait_chldexit, &wo->child_wait);
1540repeat:
1541
1542
1543
1544
1545
1546
1547 wo->notask_error = -ECHILD;
1548 if ((wo->wo_type < PIDTYPE_MAX) &&
1549 (!wo->wo_pid || hlist_empty(&wo->wo_pid->tasks[wo->wo_type])))
1550 goto notask;
1551
1552 set_current_state(TASK_INTERRUPTIBLE);
1553 read_lock(&tasklist_lock);
1554 tsk = current;
1555 do {
1556 retval = do_wait_thread(wo, tsk);
1557 if (retval)
1558 goto end;
1559
1560 retval = ptrace_do_wait(wo, tsk);
1561 if (retval)
1562 goto end;
1563
1564 if (wo->wo_flags & __WNOTHREAD)
1565 break;
1566 } while_each_thread(current, tsk);
1567 read_unlock(&tasklist_lock);
1568
1569notask:
1570 retval = wo->notask_error;
1571 if (!retval && !(wo->wo_flags & WNOHANG)) {
1572 retval = -ERESTARTSYS;
1573 if (!signal_pending(current)) {
1574 schedule();
1575 goto repeat;
1576 }
1577 }
1578end:
1579 __set_current_state(TASK_RUNNING);
1580 remove_wait_queue(¤t->signal->wait_chldexit, &wo->child_wait);
1581 return retval;
1582}
1583
1584SYSCALL_DEFINE5(waitid, int, which, pid_t, upid, struct siginfo __user *,
1585 infop, int, options, struct rusage __user *, ru)
1586{
1587 struct wait_opts wo;
1588 struct pid *pid = NULL;
1589 enum pid_type type;
1590 long ret;
1591
1592 if (options & ~(WNOHANG|WNOWAIT|WEXITED|WSTOPPED|WCONTINUED|
1593 __WNOTHREAD|__WCLONE|__WALL))
1594 return -EINVAL;
1595 if (!(options & (WEXITED|WSTOPPED|WCONTINUED)))
1596 return -EINVAL;
1597
1598 switch (which) {
1599 case P_ALL:
1600 type = PIDTYPE_MAX;
1601 break;
1602 case P_PID:
1603 type = PIDTYPE_PID;
1604 if (upid <= 0)
1605 return -EINVAL;
1606 break;
1607 case P_PGID:
1608 type = PIDTYPE_PGID;
1609 if (upid <= 0)
1610 return -EINVAL;
1611 break;
1612 default:
1613 return -EINVAL;
1614 }
1615
1616 if (type < PIDTYPE_MAX)
1617 pid = find_get_pid(upid);
1618
1619 wo.wo_type = type;
1620 wo.wo_pid = pid;
1621 wo.wo_flags = options;
1622 wo.wo_info = infop;
1623 wo.wo_stat = NULL;
1624 wo.wo_rusage = ru;
1625 ret = do_wait(&wo);
1626
1627 if (ret > 0) {
1628 ret = 0;
1629 } else if (infop) {
1630
1631
1632
1633
1634
1635 if (!ret)
1636 ret = put_user(0, &infop->si_signo);
1637 if (!ret)
1638 ret = put_user(0, &infop->si_errno);
1639 if (!ret)
1640 ret = put_user(0, &infop->si_code);
1641 if (!ret)
1642 ret = put_user(0, &infop->si_pid);
1643 if (!ret)
1644 ret = put_user(0, &infop->si_uid);
1645 if (!ret)
1646 ret = put_user(0, &infop->si_status);
1647 }
1648
1649 put_pid(pid);
1650 return ret;
1651}
1652
1653SYSCALL_DEFINE4(wait4, pid_t, upid, int __user *, stat_addr,
1654 int, options, struct rusage __user *, ru)
1655{
1656 struct wait_opts wo;
1657 struct pid *pid = NULL;
1658 enum pid_type type;
1659 long ret;
1660
1661 if (options & ~(WNOHANG|WUNTRACED|WCONTINUED|
1662 __WNOTHREAD|__WCLONE|__WALL))
1663 return -EINVAL;
1664
1665 if (upid == -1)
1666 type = PIDTYPE_MAX;
1667 else if (upid < 0) {
1668 type = PIDTYPE_PGID;
1669 pid = find_get_pid(-upid);
1670 } else if (upid == 0) {
1671 type = PIDTYPE_PGID;
1672 pid = get_task_pid(current, PIDTYPE_PGID);
1673 } else {
1674 type = PIDTYPE_PID;
1675 pid = find_get_pid(upid);
1676 }
1677
1678 wo.wo_type = type;
1679 wo.wo_pid = pid;
1680 wo.wo_flags = options | WEXITED;
1681 wo.wo_info = NULL;
1682 wo.wo_stat = stat_addr;
1683 wo.wo_rusage = ru;
1684 ret = do_wait(&wo);
1685 put_pid(pid);
1686
1687 return ret;
1688}
1689
1690#ifdef __ARCH_WANT_SYS_WAITPID
1691
1692
1693
1694
1695
1696SYSCALL_DEFINE3(waitpid, pid_t, pid, int __user *, stat_addr, int, options)
1697{
1698 return sys_wait4(pid, stat_addr, options, NULL);
1699}
1700
1701#endif
1702