LCOV - code coverage report
Current view: top level - kernel - exit.c (source / functions) Hit Total Coverage
Test: landlock.info Lines: 0 746 0.0 %
Date: 2021-04-22 12:43:58 Functions: 0 54 0.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0-only
       2             : /*
       3             :  *  linux/kernel/exit.c
       4             :  *
       5             :  *  Copyright (C) 1991, 1992  Linus Torvalds
       6             :  */
       7             : 
       8             : #include <linux/mm.h>
       9             : #include <linux/slab.h>
      10             : #include <linux/sched/autogroup.h>
      11             : #include <linux/sched/mm.h>
      12             : #include <linux/sched/stat.h>
      13             : #include <linux/sched/task.h>
      14             : #include <linux/sched/task_stack.h>
      15             : #include <linux/sched/cputime.h>
      16             : #include <linux/interrupt.h>
      17             : #include <linux/module.h>
      18             : #include <linux/capability.h>
      19             : #include <linux/completion.h>
      20             : #include <linux/personality.h>
      21             : #include <linux/tty.h>
      22             : #include <linux/iocontext.h>
      23             : #include <linux/key.h>
      24             : #include <linux/cpu.h>
      25             : #include <linux/acct.h>
      26             : #include <linux/tsacct_kern.h>
      27             : #include <linux/file.h>
      28             : #include <linux/fdtable.h>
      29             : #include <linux/freezer.h>
      30             : #include <linux/binfmts.h>
      31             : #include <linux/nsproxy.h>
      32             : #include <linux/pid_namespace.h>
      33             : #include <linux/ptrace.h>
      34             : #include <linux/profile.h>
      35             : #include <linux/mount.h>
      36             : #include <linux/proc_fs.h>
      37             : #include <linux/kthread.h>
      38             : #include <linux/mempolicy.h>
      39             : #include <linux/taskstats_kern.h>
      40             : #include <linux/delayacct.h>
      41             : #include <linux/cgroup.h>
      42             : #include <linux/syscalls.h>
      43             : #include <linux/signal.h>
      44             : #include <linux/posix-timers.h>
      45             : #include <linux/cn_proc.h>
      46             : #include <linux/mutex.h>
      47             : #include <linux/futex.h>
      48             : #include <linux/pipe_fs_i.h>
      49             : #include <linux/audit.h> /* for audit_free() */
      50             : #include <linux/resource.h>
      51             : #include <linux/blkdev.h>
      52             : #include <linux/task_io_accounting_ops.h>
      53             : #include <linux/tracehook.h>
      54             : #include <linux/fs_struct.h>
      55             : #include <linux/init_task.h>
      56             : #include <linux/perf_event.h>
      57             : #include <trace/events/sched.h>
      58             : #include <linux/hw_breakpoint.h>
      59             : #include <linux/oom.h>
      60             : #include <linux/writeback.h>
      61             : #include <linux/shm.h>
      62             : #include <linux/kcov.h>
      63             : #include <linux/random.h>
      64             : #include <linux/rcuwait.h>
      65             : #include <linux/compat.h>
      66             : #include <linux/io_uring.h>
      67             : 
      68             : #include <linux/uaccess.h>
      69             : #include <asm/unistd.h>
      70             : #include <asm/mmu_context.h>
      71             : 
      72           0 : static void __unhash_process(struct task_struct *p, bool group_dead)
      73             : {
      74           0 :         nr_threads--;
      75           0 :         detach_pid(p, PIDTYPE_PID);
      76           0 :         if (group_dead) {
      77           0 :                 detach_pid(p, PIDTYPE_TGID);
      78           0 :                 detach_pid(p, PIDTYPE_PGID);
      79           0 :                 detach_pid(p, PIDTYPE_SID);
      80             : 
      81           0 :                 list_del_rcu(&p->tasks);
      82           0 :                 list_del_init(&p->sibling);
      83           0 :                 __this_cpu_dec(process_counts);
      84             :         }
      85           0 :         list_del_rcu(&p->thread_group);
      86           0 :         list_del_rcu(&p->thread_node);
      87           0 : }
      88             : 
      89             : /*
      90             :  * This function expects the tasklist_lock write-locked.
      91             :  */
      92           0 : static void __exit_signal(struct task_struct *tsk)
      93             : {
      94           0 :         struct signal_struct *sig = tsk->signal;
      95           0 :         bool group_dead = thread_group_leader(tsk);
      96           0 :         struct sighand_struct *sighand;
      97           0 :         struct tty_struct *tty;
      98           0 :         u64 utime, stime;
      99             : 
     100           0 :         sighand = rcu_dereference_check(tsk->sighand,
     101             :                                         lockdep_tasklist_lock_is_held());
     102           0 :         spin_lock(&sighand->siglock);
     103             : 
     104             : #ifdef CONFIG_POSIX_TIMERS
     105           0 :         posix_cpu_timers_exit(tsk);
     106           0 :         if (group_dead)
     107           0 :                 posix_cpu_timers_exit_group(tsk);
     108             : #endif
     109             : 
     110           0 :         if (group_dead) {
     111           0 :                 tty = sig->tty;
     112           0 :                 sig->tty = NULL;
     113             :         } else {
     114             :                 /*
     115             :                  * If there is any task waiting for the group exit
     116             :                  * then notify it:
     117             :                  */
     118           0 :                 if (sig->notify_count > 0 && !--sig->notify_count)
     119           0 :                         wake_up_process(sig->group_exit_task);
     120             : 
     121           0 :                 if (tsk == sig->curr_target)
     122           0 :                         sig->curr_target = next_thread(tsk);
     123             :         }
     124             : 
     125           0 :         add_device_randomness((const void*) &tsk->se.sum_exec_runtime,
     126             :                               sizeof(unsigned long long));
     127             : 
     128             :         /*
     129             :          * Accumulate here the counters for all threads as they die. We could
     130             :          * skip the group leader because it is the last user of signal_struct,
     131             :          * but we want to avoid the race with thread_group_cputime() which can
     132             :          * see the empty ->thread_head list.
     133             :          */
     134           0 :         task_cputime(tsk, &utime, &stime);
     135           0 :         write_seqlock(&sig->stats_lock);
     136           0 :         sig->utime += utime;
     137           0 :         sig->stime += stime;
     138           0 :         sig->gtime += task_gtime(tsk);
     139           0 :         sig->min_flt += tsk->min_flt;
     140           0 :         sig->maj_flt += tsk->maj_flt;
     141           0 :         sig->nvcsw += tsk->nvcsw;
     142           0 :         sig->nivcsw += tsk->nivcsw;
     143           0 :         sig->inblock += task_io_get_inblock(tsk);
     144           0 :         sig->oublock += task_io_get_oublock(tsk);
     145           0 :         task_io_accounting_add(&sig->ioac, &tsk->ioac);
     146           0 :         sig->sum_sched_runtime += tsk->se.sum_exec_runtime;
     147           0 :         sig->nr_threads--;
     148           0 :         __unhash_process(tsk, group_dead);
     149           0 :         write_sequnlock(&sig->stats_lock);
     150             : 
     151             :         /*
     152             :          * Do this under ->siglock, we can race with another thread
     153             :          * doing sigqueue_free() if we have SIGQUEUE_PREALLOC signals.
     154             :          */
     155           0 :         flush_sigqueue(&tsk->pending);
     156           0 :         tsk->sighand = NULL;
     157           0 :         spin_unlock(&sighand->siglock);
     158             : 
     159           0 :         __cleanup_sighand(sighand);
     160           0 :         clear_tsk_thread_flag(tsk, TIF_SIGPENDING);
     161           0 :         if (group_dead) {
     162           0 :                 flush_sigqueue(&sig->shared_pending);
     163           0 :                 tty_kref_put(tty);
     164             :         }
     165           0 : }
     166             : 
     167           0 : static void delayed_put_task_struct(struct rcu_head *rhp)
     168             : {
     169           0 :         struct task_struct *tsk = container_of(rhp, struct task_struct, rcu);
     170             : 
     171           0 :         perf_event_delayed_put(tsk);
     172           0 :         trace_sched_process_free(tsk);
     173           0 :         put_task_struct(tsk);
     174           0 : }
     175             : 
     176           0 : void put_task_struct_rcu_user(struct task_struct *task)
     177             : {
     178           0 :         if (refcount_dec_and_test(&task->rcu_users))
     179           0 :                 call_rcu(&task->rcu, delayed_put_task_struct);
     180           0 : }
     181             : 
     182           0 : void release_task(struct task_struct *p)
     183             : {
     184           0 :         struct task_struct *leader;
     185           0 :         struct pid *thread_pid;
     186           0 :         int zap_leader;
     187           0 : repeat:
     188             :         /* don't need to get the RCU readlock here - the process is dead and
     189             :          * can't be modifying its own credentials. But shut RCU-lockdep up */
     190           0 :         rcu_read_lock();
     191           0 :         atomic_dec(&__task_cred(p)->user->processes);
     192           0 :         rcu_read_unlock();
     193             : 
     194           0 :         cgroup_release(p);
     195             : 
     196           0 :         write_lock_irq(&tasklist_lock);
     197           0 :         ptrace_release_task(p);
     198           0 :         thread_pid = get_pid(p->thread_pid);
     199           0 :         __exit_signal(p);
     200             : 
     201             :         /*
     202             :          * If we are the last non-leader member of the thread
     203             :          * group, and the leader is zombie, then notify the
     204             :          * group leader's parent process. (if it wants notification.)
     205             :          */
     206           0 :         zap_leader = 0;
     207           0 :         leader = p->group_leader;
     208           0 :         if (leader != p && thread_group_empty(leader)
     209           0 :                         && leader->exit_state == EXIT_ZOMBIE) {
     210             :                 /*
     211             :                  * If we were the last child thread and the leader has
     212             :                  * exited already, and the leader's parent ignores SIGCHLD,
     213             :                  * then we are the one who should release the leader.
     214             :                  */
     215           0 :                 zap_leader = do_notify_parent(leader, leader->exit_signal);
     216           0 :                 if (zap_leader)
     217           0 :                         leader->exit_state = EXIT_DEAD;
     218             :         }
     219             : 
     220           0 :         write_unlock_irq(&tasklist_lock);
     221           0 :         seccomp_filter_release(p);
     222           0 :         proc_flush_pid(thread_pid);
     223           0 :         put_pid(thread_pid);
     224           0 :         release_thread(p);
     225           0 :         put_task_struct_rcu_user(p);
     226             : 
     227           0 :         p = leader;
     228           0 :         if (unlikely(zap_leader))
     229           0 :                 goto repeat;
     230           0 : }
     231             : 
     232           0 : int rcuwait_wake_up(struct rcuwait *w)
     233             : {
     234           0 :         int ret = 0;
     235           0 :         struct task_struct *task;
     236             : 
     237           0 :         rcu_read_lock();
     238             : 
     239             :         /*
     240             :          * Order condition vs @task, such that everything prior to the load
     241             :          * of @task is visible. This is the condition as to why the user called
     242             :          * rcuwait_wake() in the first place. Pairs with set_current_state()
     243             :          * barrier (A) in rcuwait_wait_event().
     244             :          *
     245             :          *    WAIT                WAKE
     246             :          *    [S] tsk = current   [S] cond = true
     247             :          *        MB (A)              MB (B)
     248             :          *    [L] cond            [L] tsk
     249             :          */
     250           0 :         smp_mb(); /* (B) */
     251             : 
     252           0 :         task = rcu_dereference(w->task);
     253           0 :         if (task)
     254           0 :                 ret = wake_up_process(task);
     255           0 :         rcu_read_unlock();
     256             : 
     257           0 :         return ret;
     258             : }
     259             : EXPORT_SYMBOL_GPL(rcuwait_wake_up);
     260             : 
     261             : /*
     262             :  * Determine if a process group is "orphaned", according to the POSIX
     263             :  * definition in 2.2.2.52.  Orphaned process groups are not to be affected
     264             :  * by terminal-generated stop signals.  Newly orphaned process groups are
     265             :  * to receive a SIGHUP and a SIGCONT.
     266             :  *
     267             :  * "I ask you, have you ever known what it is to be an orphan?"
     268             :  */
     269           0 : static int will_become_orphaned_pgrp(struct pid *pgrp,
     270             :                                         struct task_struct *ignored_task)
     271             : {
     272           0 :         struct task_struct *p;
     273             : 
     274           0 :         do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
     275           0 :                 if ((p == ignored_task) ||
     276           0 :                     (p->exit_state && thread_group_empty(p)) ||
     277           0 :                     is_global_init(p->real_parent))
     278           0 :                         continue;
     279             : 
     280           0 :                 if (task_pgrp(p->real_parent) != pgrp &&
     281           0 :                     task_session(p->real_parent) == task_session(p))
     282             :                         return 0;
     283             :         } while_each_pid_task(pgrp, PIDTYPE_PGID, p);
     284             : 
     285             :         return 1;
     286             : }
     287             : 
     288           0 : int is_current_pgrp_orphaned(void)
     289             : {
     290           0 :         int retval;
     291             : 
     292           0 :         read_lock(&tasklist_lock);
     293           0 :         retval = will_become_orphaned_pgrp(task_pgrp(current), NULL);
     294           0 :         read_unlock(&tasklist_lock);
     295             : 
     296           0 :         return retval;
     297             : }
     298             : 
     299           0 : static bool has_stopped_jobs(struct pid *pgrp)
     300             : {
     301           0 :         struct task_struct *p;
     302             : 
     303           0 :         do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
     304           0 :                 if (p->signal->flags & SIGNAL_STOP_STOPPED)
     305             :                         return true;
     306           0 :         } while_each_pid_task(pgrp, PIDTYPE_PGID, p);
     307             : 
     308             :         return false;
     309             : }
     310             : 
     311             : /*
     312             :  * Check to see if any process groups have become orphaned as
     313             :  * a result of our exiting, and if they have any stopped jobs,
     314             :  * send them a SIGHUP and then a SIGCONT. (POSIX 3.2.2.2)
     315             :  */
     316             : static void
     317           0 : kill_orphaned_pgrp(struct task_struct *tsk, struct task_struct *parent)
     318             : {
     319           0 :         struct pid *pgrp = task_pgrp(tsk);
     320           0 :         struct task_struct *ignored_task = tsk;
     321             : 
     322           0 :         if (!parent)
     323             :                 /* exit: our father is in a different pgrp than
     324             :                  * we are and we were the only connection outside.
     325             :                  */
     326           0 :                 parent = tsk->real_parent;
     327             :         else
     328             :                 /* reparent: our child is in a different pgrp than
     329             :                  * we are, and it was the only connection outside.
     330             :                  */
     331             :                 ignored_task = NULL;
     332             : 
     333           0 :         if (task_pgrp(parent) != pgrp &&
     334           0 :             task_session(parent) == task_session(tsk) &&
     335           0 :             will_become_orphaned_pgrp(pgrp, ignored_task) &&
     336           0 :             has_stopped_jobs(pgrp)) {
     337           0 :                 __kill_pgrp_info(SIGHUP, SEND_SIG_PRIV, pgrp);
     338           0 :                 __kill_pgrp_info(SIGCONT, SEND_SIG_PRIV, pgrp);
     339             :         }
     340           0 : }
     341             : 
     342             : #ifdef CONFIG_MEMCG
     343             : /*
     344             :  * A task is exiting.   If it owned this mm, find a new owner for the mm.
     345             :  */
     346             : void mm_update_next_owner(struct mm_struct *mm)
     347             : {
     348             :         struct task_struct *c, *g, *p = current;
     349             : 
     350             : retry:
     351             :         /*
     352             :          * If the exiting or execing task is not the owner, it's
     353             :          * someone else's problem.
     354             :          */
     355             :         if (mm->owner != p)
     356             :                 return;
     357             :         /*
     358             :          * The current owner is exiting/execing and there are no other
     359             :          * candidates.  Do not leave the mm pointing to a possibly
     360             :          * freed task structure.
     361             :          */
     362             :         if (atomic_read(&mm->mm_users) <= 1) {
     363             :                 WRITE_ONCE(mm->owner, NULL);
     364             :                 return;
     365             :         }
     366             : 
     367             :         read_lock(&tasklist_lock);
     368             :         /*
     369             :          * Search in the children
     370             :          */
     371             :         list_for_each_entry(c, &p->children, sibling) {
     372             :                 if (c->mm == mm)
     373             :                         goto assign_new_owner;
     374             :         }
     375             : 
     376             :         /*
     377             :          * Search in the siblings
     378             :          */
     379             :         list_for_each_entry(c, &p->real_parent->children, sibling) {
     380             :                 if (c->mm == mm)
     381             :                         goto assign_new_owner;
     382             :         }
     383             : 
     384             :         /*
     385             :          * Search through everything else, we should not get here often.
     386             :          */
     387             :         for_each_process(g) {
     388             :                 if (g->flags & PF_KTHREAD)
     389             :                         continue;
     390             :                 for_each_thread(g, c) {
     391             :                         if (c->mm == mm)
     392             :                                 goto assign_new_owner;
     393             :                         if (c->mm)
     394             :                                 break;
     395             :                 }
     396             :         }
     397             :         read_unlock(&tasklist_lock);
     398             :         /*
     399             :          * We found no owner yet mm_users > 1: this implies that we are
     400             :          * most likely racing with swapoff (try_to_unuse()) or /proc or
     401             :          * ptrace or page migration (get_task_mm()).  Mark owner as NULL.
     402             :          */
     403             :         WRITE_ONCE(mm->owner, NULL);
     404             :         return;
     405             : 
     406             : assign_new_owner:
     407             :         BUG_ON(c == p);
     408             :         get_task_struct(c);
     409             :         /*
     410             :          * The task_lock protects c->mm from changing.
     411             :          * We always want mm->owner->mm == mm
     412             :          */
     413             :         task_lock(c);
     414             :         /*
     415             :          * Delay read_unlock() till we have the task_lock()
     416             :          * to ensure that c does not slip away underneath us
     417             :          */
     418             :         read_unlock(&tasklist_lock);
     419             :         if (c->mm != mm) {
     420             :                 task_unlock(c);
     421             :                 put_task_struct(c);
     422             :                 goto retry;
     423             :         }
     424             :         WRITE_ONCE(mm->owner, c);
     425             :         task_unlock(c);
     426             :         put_task_struct(c);
     427             : }
     428             : #endif /* CONFIG_MEMCG */
     429             : 
     430             : /*
     431             :  * Turn us into a lazy TLB process if we
     432             :  * aren't already..
     433             :  */
     434           0 : static void exit_mm(void)
     435             : {
     436           0 :         struct mm_struct *mm = current->mm;
     437           0 :         struct core_state *core_state;
     438             : 
     439           0 :         exit_mm_release(current, mm);
     440           0 :         if (!mm)
     441             :                 return;
     442           0 :         sync_mm_rss(mm);
     443             :         /*
     444             :          * Serialize with any possible pending coredump.
     445             :          * We must hold mmap_lock around checking core_state
     446             :          * and clearing tsk->mm.  The core-inducing thread
     447             :          * will increment ->nr_threads for each thread in the
     448             :          * group with ->mm != NULL.
     449             :          */
     450           0 :         mmap_read_lock(mm);
     451           0 :         core_state = mm->core_state;
     452           0 :         if (core_state) {
     453           0 :                 struct core_thread self;
     454             : 
     455           0 :                 mmap_read_unlock(mm);
     456             : 
     457           0 :                 self.task = current;
     458           0 :                 if (self.task->flags & PF_SIGNALED)
     459           0 :                         self.next = xchg(&core_state->dumper.next, &self);
     460             :                 else
     461           0 :                         self.task = NULL;
     462             :                 /*
     463             :                  * Implies mb(), the result of xchg() must be visible
     464             :                  * to core_state->dumper.
     465             :                  */
     466           0 :                 if (atomic_dec_and_test(&core_state->nr_threads))
     467           0 :                         complete(&core_state->startup);
     468             : 
     469           0 :                 for (;;) {
     470           0 :                         set_current_state(TASK_UNINTERRUPTIBLE);
     471           0 :                         if (!self.task) /* see coredump_finish() */
     472             :                                 break;
     473           0 :                         freezable_schedule();
     474             :                 }
     475           0 :                 __set_current_state(TASK_RUNNING);
     476           0 :                 mmap_read_lock(mm);
     477             :         }
     478           0 :         mmgrab(mm);
     479           0 :         BUG_ON(mm != current->active_mm);
     480             :         /* more a memory barrier than a real lock */
     481           0 :         task_lock(current);
     482             :         /*
     483             :          * When a thread stops operating on an address space, the loop
     484             :          * in membarrier_private_expedited() may not observe that
     485             :          * tsk->mm, and the loop in membarrier_global_expedited() may
     486             :          * not observe a MEMBARRIER_STATE_GLOBAL_EXPEDITED
     487             :          * rq->membarrier_state, so those would not issue an IPI.
     488             :          * Membarrier requires a memory barrier after accessing
     489             :          * user-space memory, before clearing tsk->mm or the
     490             :          * rq->membarrier_state.
     491             :          */
     492           0 :         smp_mb__after_spinlock();
     493           0 :         local_irq_disable();
     494           0 :         current->mm = NULL;
     495           0 :         membarrier_update_current_mm(NULL);
     496           0 :         enter_lazy_tlb(mm, current);
     497           0 :         local_irq_enable();
     498           0 :         task_unlock(current);
     499           0 :         mmap_read_unlock(mm);
     500           0 :         mm_update_next_owner(mm);
     501           0 :         mmput(mm);
     502           0 :         if (test_thread_flag(TIF_MEMDIE))
     503           0 :                 exit_oom_victim();
     504             : }
     505             : 
     506           0 : static struct task_struct *find_alive_thread(struct task_struct *p)
     507             : {
     508           0 :         struct task_struct *t;
     509             : 
     510           0 :         for_each_thread(p, t) {
     511           0 :                 if (!(t->flags & PF_EXITING))
     512           0 :                         return t;
     513             :         }
     514             :         return NULL;
     515             : }
     516             : 
     517           0 : static struct task_struct *find_child_reaper(struct task_struct *father,
     518             :                                                 struct list_head *dead)
     519             :         __releases(&tasklist_lock)
     520             :         __acquires(&tasklist_lock)
     521             : {
     522           0 :         struct pid_namespace *pid_ns = task_active_pid_ns(father);
     523           0 :         struct task_struct *reaper = pid_ns->child_reaper;
     524           0 :         struct task_struct *p, *n;
     525             : 
     526           0 :         if (likely(reaper != father))
     527             :                 return reaper;
     528             : 
     529           0 :         reaper = find_alive_thread(father);
     530           0 :         if (reaper) {
     531           0 :                 pid_ns->child_reaper = reaper;
     532           0 :                 return reaper;
     533             :         }
     534             : 
     535           0 :         write_unlock_irq(&tasklist_lock);
     536             : 
     537           0 :         list_for_each_entry_safe(p, n, dead, ptrace_entry) {
     538           0 :                 list_del_init(&p->ptrace_entry);
     539           0 :                 release_task(p);
     540             :         }
     541             : 
     542           0 :         zap_pid_ns_processes(pid_ns);
     543             :         write_lock_irq(&tasklist_lock);
     544             : 
     545             :         return father;
     546             : }
     547             : 
     548             : /*
     549             :  * When we die, we re-parent all our children, and try to:
     550             :  * 1. give them to another thread in our thread group, if such a member exists
     551             :  * 2. give it to the first ancestor process which prctl'd itself as a
     552             :  *    child_subreaper for its children (like a service manager)
     553             :  * 3. give it to the init process (PID 1) in our pid namespace
     554             :  */
     555           0 : static struct task_struct *find_new_reaper(struct task_struct *father,
     556             :                                            struct task_struct *child_reaper)
     557             : {
     558           0 :         struct task_struct *thread, *reaper;
     559             : 
     560           0 :         thread = find_alive_thread(father);
     561           0 :         if (thread)
     562             :                 return thread;
     563             : 
     564           0 :         if (father->signal->has_child_subreaper) {
     565           0 :                 unsigned int ns_level = task_pid(father)->level;
     566             :                 /*
     567             :                  * Find the first ->is_child_subreaper ancestor in our pid_ns.
     568             :                  * We can't check reaper != child_reaper to ensure we do not
     569             :                  * cross the namespaces, the exiting parent could be injected
     570             :                  * by setns() + fork().
     571             :                  * We check pid->level, this is slightly more efficient than
     572             :                  * task_active_pid_ns(reaper) != task_active_pid_ns(father).
     573             :                  */
     574           0 :                 for (reaper = father->real_parent;
     575           0 :                      task_pid(reaper)->level == ns_level;
     576           0 :                      reaper = reaper->real_parent) {
     577           0 :                         if (reaper == &init_task)
     578             :                                 break;
     579           0 :                         if (!reaper->signal->is_child_subreaper)
     580           0 :                                 continue;
     581           0 :                         thread = find_alive_thread(reaper);
     582           0 :                         if (thread)
     583           0 :                                 return thread;
     584             :                 }
     585             :         }
     586             : 
     587             :         return child_reaper;
     588             : }
     589             : 
     590             : /*
     591             : * Any that need to be release_task'd are put on the @dead list.
     592             :  */
     593           0 : static void reparent_leader(struct task_struct *father, struct task_struct *p,
     594             :                                 struct list_head *dead)
     595             : {
     596           0 :         if (unlikely(p->exit_state == EXIT_DEAD))
     597             :                 return;
     598             : 
     599             :         /* We don't want people slaying init. */
     600           0 :         p->exit_signal = SIGCHLD;
     601             : 
     602             :         /* If it has exited notify the new parent about this child's death. */
     603           0 :         if (!p->ptrace &&
     604           0 :             p->exit_state == EXIT_ZOMBIE && thread_group_empty(p)) {
     605           0 :                 if (do_notify_parent(p, p->exit_signal)) {
     606           0 :                         p->exit_state = EXIT_DEAD;
     607           0 :                         list_add(&p->ptrace_entry, dead);
     608             :                 }
     609             :         }
     610             : 
     611           0 :         kill_orphaned_pgrp(p, father);
     612             : }
     613             : 
     614             : /*
     615             :  * This does two things:
     616             :  *
     617             :  * A.  Make init inherit all the child processes
     618             :  * B.  Check to see if any process groups have become orphaned
     619             :  *      as a result of our exiting, and if they have any stopped
     620             :  *      jobs, send them a SIGHUP and then a SIGCONT.  (POSIX 3.2.2.2)
     621             :  */
     622           0 : static void forget_original_parent(struct task_struct *father,
     623             :                                         struct list_head *dead)
     624             : {
     625           0 :         struct task_struct *p, *t, *reaper;
     626             : 
     627           0 :         if (unlikely(!list_empty(&father->ptraced)))
     628           0 :                 exit_ptrace(father, dead);
     629             : 
     630             :         /* Can drop and reacquire tasklist_lock */
     631           0 :         reaper = find_child_reaper(father, dead);
     632           0 :         if (list_empty(&father->children))
     633             :                 return;
     634             : 
     635           0 :         reaper = find_new_reaper(father, reaper);
     636           0 :         list_for_each_entry(p, &father->children, sibling) {
     637           0 :                 for_each_thread(p, t) {
     638           0 :                         RCU_INIT_POINTER(t->real_parent, reaper);
     639           0 :                         BUG_ON((!t->ptrace) != (rcu_access_pointer(t->parent) == father));
     640           0 :                         if (likely(!t->ptrace))
     641           0 :                                 t->parent = t->real_parent;
     642           0 :                         if (t->pdeath_signal)
     643           0 :                                 group_send_sig_info(t->pdeath_signal,
     644             :                                                     SEND_SIG_NOINFO, t,
     645             :                                                     PIDTYPE_TGID);
     646             :                 }
     647             :                 /*
     648             :                  * If this is a threaded reparent there is no need to
     649             :                  * notify anyone anything has happened.
     650             :                  */
     651           0 :                 if (!same_thread_group(reaper, father))
     652           0 :                         reparent_leader(father, p, dead);
     653             :         }
     654           0 :         list_splice_tail_init(&father->children, &reaper->children);
     655             : }
     656             : 
     657             : /*
     658             :  * Send signals to all our closest relatives so that they know
     659             :  * to properly mourn us..
     660             :  */
     661           0 : static void exit_notify(struct task_struct *tsk, int group_dead)
     662             : {
     663           0 :         bool autoreap;
     664           0 :         struct task_struct *p, *n;
     665           0 :         LIST_HEAD(dead);
     666             : 
     667           0 :         write_lock_irq(&tasklist_lock);
     668           0 :         forget_original_parent(tsk, &dead);
     669             : 
     670           0 :         if (group_dead)
     671           0 :                 kill_orphaned_pgrp(tsk->group_leader, NULL);
     672             : 
     673           0 :         tsk->exit_state = EXIT_ZOMBIE;
     674           0 :         if (unlikely(tsk->ptrace)) {
     675           0 :                 int sig = thread_group_leader(tsk) &&
     676           0 :                                 thread_group_empty(tsk) &&
     677           0 :                                 !ptrace_reparented(tsk) ?
     678           0 :                         tsk->exit_signal : SIGCHLD;
     679           0 :                 autoreap = do_notify_parent(tsk, sig);
     680           0 :         } else if (thread_group_leader(tsk)) {
     681           0 :                 autoreap = thread_group_empty(tsk) &&
     682           0 :                         do_notify_parent(tsk, tsk->exit_signal);
     683             :         } else {
     684             :                 autoreap = true;
     685             :         }
     686             : 
     687           0 :         if (autoreap) {
     688           0 :                 tsk->exit_state = EXIT_DEAD;
     689           0 :                 list_add(&tsk->ptrace_entry, &dead);
     690             :         }
     691             : 
     692             :         /* mt-exec, de_thread() is waiting for group leader */
     693           0 :         if (unlikely(tsk->signal->notify_count < 0))
     694           0 :                 wake_up_process(tsk->signal->group_exit_task);
     695           0 :         write_unlock_irq(&tasklist_lock);
     696             : 
     697           0 :         list_for_each_entry_safe(p, n, &dead, ptrace_entry) {
     698           0 :                 list_del_init(&p->ptrace_entry);
     699           0 :                 release_task(p);
     700             :         }
     701           0 : }
     702             : 
     703             : #ifdef CONFIG_DEBUG_STACK_USAGE
     704             : static void check_stack_usage(void)
     705             : {
     706             :         static DEFINE_SPINLOCK(low_water_lock);
     707             :         static int lowest_to_date = THREAD_SIZE;
     708             :         unsigned long free;
     709             : 
     710             :         free = stack_not_used(current);
     711             : 
     712             :         if (free >= lowest_to_date)
     713             :                 return;
     714             : 
     715             :         spin_lock(&low_water_lock);
     716             :         if (free < lowest_to_date) {
     717             :                 pr_info("%s (%d) used greatest stack depth: %lu bytes left\n",
     718             :                         current->comm, task_pid_nr(current), free);
     719             :                 lowest_to_date = free;
     720             :         }
     721             :         spin_unlock(&low_water_lock);
     722             : }
     723             : #else
     724           0 : static inline void check_stack_usage(void) {}
     725             : #endif
     726             : 
     727           0 : void __noreturn do_exit(long code)
     728             : {
     729           0 :         struct task_struct *tsk = current;
     730           0 :         int group_dead;
     731             : 
     732             :         /*
     733             :          * We can get here from a kernel oops, sometimes with preemption off.
     734             :          * Start by checking for critical errors.
     735             :          * Then fix up important state like USER_DS and preemption.
     736             :          * Then do everything else.
     737             :          */
     738             : 
     739           0 :         WARN_ON(blk_needs_flush_plug(tsk));
     740             : 
     741           0 :         if (unlikely(in_interrupt()))
     742           0 :                 panic("Aiee, killing interrupt handler!");
     743           0 :         if (unlikely(!tsk->pid))
     744           0 :                 panic("Attempted to kill the idle task!");
     745             : 
     746             :         /*
     747             :          * If do_exit is called because this processes oopsed, it's possible
     748             :          * that get_fs() was left as KERNEL_DS, so reset it to USER_DS before
     749             :          * continuing. Amongst other possible reasons, this is to prevent
     750             :          * mm_release()->clear_child_tid() from writing to a user-controlled
     751             :          * kernel address.
     752             :          */
     753           0 :         force_uaccess_begin();
     754             : 
     755           0 :         if (unlikely(in_atomic())) {
     756           0 :                 pr_info("note: %s[%d] exited with preempt_count %d\n",
     757             :                         current->comm, task_pid_nr(current),
     758             :                         preempt_count());
     759           0 :                 preempt_count_set(PREEMPT_ENABLED);
     760             :         }
     761             : 
     762           0 :         profile_task_exit(tsk);
     763           0 :         kcov_task_exit(tsk);
     764             : 
     765           0 :         ptrace_event(PTRACE_EVENT_EXIT, code);
     766             : 
     767           0 :         validate_creds_for_do_exit(tsk);
     768             : 
     769             :         /*
     770             :          * We're taking recursive faults here in do_exit. Safest is to just
     771             :          * leave this task alone and wait for reboot.
     772             :          */
     773           0 :         if (unlikely(tsk->flags & PF_EXITING)) {
     774           0 :                 pr_alert("Fixing recursive fault but reboot is needed!\n");
     775           0 :                 futex_exit_recursive(tsk);
     776           0 :                 set_current_state(TASK_UNINTERRUPTIBLE);
     777           0 :                 schedule();
     778             :         }
     779             : 
     780           0 :         io_uring_files_cancel(tsk->files);
     781           0 :         exit_signals(tsk);  /* sets PF_EXITING */
     782             : 
     783             :         /* sync mm's RSS info before statistics gathering */
     784           0 :         if (tsk->mm)
     785           0 :                 sync_mm_rss(tsk->mm);
     786           0 :         acct_update_integrals(tsk);
     787           0 :         group_dead = atomic_dec_and_test(&tsk->signal->live);
     788           0 :         if (group_dead) {
     789             :                 /*
     790             :                  * If the last thread of global init has exited, panic
     791             :                  * immediately to get a useable coredump.
     792             :                  */
     793           0 :                 if (unlikely(is_global_init(tsk)))
     794           0 :                         panic("Attempted to kill init! exitcode=0x%08x\n",
     795           0 :                                 tsk->signal->group_exit_code ?: (int)code);
     796             : 
     797             : #ifdef CONFIG_POSIX_TIMERS
     798           0 :                 hrtimer_cancel(&tsk->signal->real_timer);
     799           0 :                 exit_itimers(tsk->signal);
     800             : #endif
     801           0 :                 if (tsk->mm)
     802           0 :                         setmax_mm_hiwater_rss(&tsk->signal->maxrss, tsk->mm);
     803             :         }
     804           0 :         acct_collect(code, group_dead);
     805           0 :         if (group_dead)
     806             :                 tty_audit_exit();
     807           0 :         audit_free(tsk);
     808             : 
     809           0 :         tsk->exit_code = code;
     810           0 :         taskstats_exit(tsk, group_dead);
     811             : 
     812           0 :         exit_mm();
     813             : 
     814           0 :         if (group_dead)
     815           0 :                 acct_process();
     816           0 :         trace_sched_process_exit(tsk);
     817             : 
     818           0 :         exit_sem(tsk);
     819           0 :         exit_shm(tsk);
     820           0 :         exit_files(tsk);
     821           0 :         exit_fs(tsk);
     822           0 :         if (group_dead)
     823           0 :                 disassociate_ctty(1);
     824           0 :         exit_task_namespaces(tsk);
     825           0 :         exit_task_work(tsk);
     826           0 :         exit_thread(tsk);
     827             : 
     828             :         /*
     829             :          * Flush inherited counters to the parent - before the parent
     830             :          * gets woken up by child-exit notifications.
     831             :          *
     832             :          * because of cgroup mode, must be called before cgroup_exit()
     833             :          */
     834           0 :         perf_event_exit_task(tsk);
     835             : 
     836           0 :         sched_autogroup_exit_task(tsk);
     837           0 :         cgroup_exit(tsk);
     838             : 
     839             :         /*
     840             :          * FIXME: do that only when needed, using sched_exit tracepoint
     841             :          */
     842           0 :         flush_ptrace_hw_breakpoint(tsk);
     843             : 
     844           0 :         exit_tasks_rcu_start();
     845           0 :         exit_notify(tsk, group_dead);
     846           0 :         proc_exit_connector(tsk);
     847           0 :         mpol_put_task_policy(tsk);
     848             : #ifdef CONFIG_FUTEX
     849           0 :         if (unlikely(current->pi_state_cache))
     850           0 :                 kfree(current->pi_state_cache);
     851             : #endif
     852             :         /*
     853             :          * Make sure we are holding no locks:
     854             :          */
     855           0 :         debug_check_no_locks_held();
     856             : 
     857           0 :         if (tsk->io_context)
     858           0 :                 exit_io_context(tsk);
     859             : 
     860           0 :         if (tsk->splice_pipe)
     861           0 :                 free_pipe_info(tsk->splice_pipe);
     862             : 
     863           0 :         if (tsk->task_frag.page)
     864           0 :                 put_page(tsk->task_frag.page);
     865             : 
     866           0 :         validate_creds_for_do_exit(tsk);
     867             : 
     868           0 :         check_stack_usage();
     869           0 :         preempt_disable();
     870           0 :         if (tsk->nr_dirtied)
     871           0 :                 __this_cpu_add(dirty_throttle_leaks, tsk->nr_dirtied);
     872           0 :         exit_rcu();
     873           0 :         exit_tasks_rcu_finish();
     874             : 
     875           0 :         lockdep_free_task(tsk);
     876           0 :         do_task_dead();
     877             : }
     878             : EXPORT_SYMBOL_GPL(do_exit);
     879             : 
     880           0 : void complete_and_exit(struct completion *comp, long code)
     881             : {
     882           0 :         if (comp)
     883           0 :                 complete(comp);
     884             : 
     885           0 :         do_exit(code);
     886             : }
     887             : EXPORT_SYMBOL(complete_and_exit);
     888             : 
     889           0 : SYSCALL_DEFINE1(exit, int, error_code)
     890             : {
     891           0 :         do_exit((error_code&0xff)<<8);
     892             : }
     893             : 
     894             : /*
     895             :  * Take down every thread in the group.  This is called by fatal signals
     896             :  * as well as by sys_exit_group (below).
     897             :  */
     898             : void
     899           0 : do_group_exit(int exit_code)
     900             : {
     901           0 :         struct signal_struct *sig = current->signal;
     902             : 
     903           0 :         BUG_ON(exit_code & 0x80); /* core dumps don't get here */
     904             : 
     905           0 :         if (signal_group_exit(sig))
     906           0 :                 exit_code = sig->group_exit_code;
     907           0 :         else if (!thread_group_empty(current)) {
     908           0 :                 struct sighand_struct *const sighand = current->sighand;
     909             : 
     910           0 :                 spin_lock_irq(&sighand->siglock);
     911           0 :                 if (signal_group_exit(sig))
     912             :                         /* Another thread got here before we took the lock.  */
     913           0 :                         exit_code = sig->group_exit_code;
     914             :                 else {
     915           0 :                         sig->group_exit_code = exit_code;
     916           0 :                         sig->flags = SIGNAL_GROUP_EXIT;
     917           0 :                         zap_other_threads(current);
     918             :                 }
     919           0 :                 spin_unlock_irq(&sighand->siglock);
     920             :         }
     921             : 
     922           0 :         do_exit(exit_code);
     923             :         /* NOTREACHED */
     924             : }
     925             : 
     926             : /*
     927             :  * this kills every thread in the thread group. Note that any externally
     928             :  * wait4()-ing process will get the correct exit code - even if this
     929             :  * thread is not the thread group leader.
     930             :  */
     931           0 : SYSCALL_DEFINE1(exit_group, int, error_code)
     932             : {
     933           0 :         do_group_exit((error_code & 0xff) << 8);
     934             :         /* NOTREACHED */
     935             :         return 0;
     936             : }
     937             : 
     938             : struct waitid_info {
     939             :         pid_t pid;
     940             :         uid_t uid;
     941             :         int status;
     942             :         int cause;
     943             : };
     944             : 
     945             : struct wait_opts {
     946             :         enum pid_type           wo_type;
     947             :         int                     wo_flags;
     948             :         struct pid              *wo_pid;
     949             : 
     950             :         struct waitid_info      *wo_info;
     951             :         int                     wo_stat;
     952             :         struct rusage           *wo_rusage;
     953             : 
     954             :         wait_queue_entry_t              child_wait;
     955             :         int                     notask_error;
     956             : };
     957             : 
     958           0 : static int eligible_pid(struct wait_opts *wo, struct task_struct *p)
     959             : {
     960           0 :         return  wo->wo_type == PIDTYPE_MAX ||
     961           0 :                 task_pid_type(p, wo->wo_type) == wo->wo_pid;
     962             : }
     963             : 
     964             : static int
     965           0 : eligible_child(struct wait_opts *wo, bool ptrace, struct task_struct *p)
     966             : {
     967           0 :         if (!eligible_pid(wo, p))
     968             :                 return 0;
     969             : 
     970             :         /*
     971             :          * Wait for all children (clone and not) if __WALL is set or
     972             :          * if it is traced by us.
     973             :          */
     974           0 :         if (ptrace || (wo->wo_flags & __WALL))
     975             :                 return 1;
     976             : 
     977             :         /*
     978             :          * Otherwise, wait for clone children *only* if __WCLONE is set;
     979             :          * otherwise, wait for non-clone children *only*.
     980             :          *
     981             :          * Note: a "clone" child here is one that reports to its parent
     982             :          * using a signal other than SIGCHLD, or a non-leader thread which
     983             :          * we can only see if it is traced by us.
     984             :          */
     985           0 :         if ((p->exit_signal != SIGCHLD) ^ !!(wo->wo_flags & __WCLONE))
     986           0 :                 return 0;
     987             : 
     988             :         return 1;
     989             : }
     990             : 
     991             : /*
     992             :  * Handle sys_wait4 work for one task in state EXIT_ZOMBIE.  We hold
     993             :  * read_lock(&tasklist_lock) on entry.  If we return zero, we still hold
     994             :  * the lock and this task is uninteresting.  If we return nonzero, we have
     995             :  * released the lock and the system call should return.
     996             :  */
     997           0 : static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
     998             : {
     999           0 :         int state, status;
    1000           0 :         pid_t pid = task_pid_vnr(p);
    1001           0 :         uid_t uid = from_kuid_munged(current_user_ns(), task_uid(p));
    1002           0 :         struct waitid_info *infop;
    1003             : 
    1004           0 :         if (!likely(wo->wo_flags & WEXITED))
    1005             :                 return 0;
    1006             : 
    1007           0 :         if (unlikely(wo->wo_flags & WNOWAIT)) {
    1008           0 :                 status = p->exit_code;
    1009           0 :                 get_task_struct(p);
    1010           0 :                 read_unlock(&tasklist_lock);
    1011           0 :                 sched_annotate_sleep();
    1012           0 :                 if (wo->wo_rusage)
    1013           0 :                         getrusage(p, RUSAGE_BOTH, wo->wo_rusage);
    1014           0 :                 put_task_struct(p);
    1015           0 :                 goto out_info;
    1016             :         }
    1017             :         /*
    1018             :          * Move the task's state to DEAD/TRACE, only one thread can do this.
    1019             :          */
    1020           0 :         state = (ptrace_reparented(p) && thread_group_leader(p)) ?
    1021           0 :                 EXIT_TRACE : EXIT_DEAD;
    1022           0 :         if (cmpxchg(&p->exit_state, EXIT_ZOMBIE, state) != EXIT_ZOMBIE)
    1023             :                 return 0;
    1024             :         /*
    1025             :          * We own this thread, nobody else can reap it.
    1026             :          */
    1027           0 :         read_unlock(&tasklist_lock);
    1028           0 :         sched_annotate_sleep();
    1029             : 
    1030             :         /*
    1031             :          * Check thread_group_leader() to exclude the traced sub-threads.
    1032             :          */
    1033           0 :         if (state == EXIT_DEAD && thread_group_leader(p)) {
    1034           0 :                 struct signal_struct *sig = p->signal;
    1035           0 :                 struct signal_struct *psig = current->signal;
    1036           0 :                 unsigned long maxrss;
    1037           0 :                 u64 tgutime, tgstime;
    1038             : 
    1039             :                 /*
    1040             :                  * The resource counters for the group leader are in its
    1041             :                  * own task_struct.  Those for dead threads in the group
    1042             :                  * are in its signal_struct, as are those for the child
    1043             :                  * processes it has previously reaped.  All these
    1044             :                  * accumulate in the parent's signal_struct c* fields.
    1045             :                  *
    1046             :                  * We don't bother to take a lock here to protect these
    1047             :                  * p->signal fields because the whole thread group is dead
    1048             :                  * and nobody can change them.
    1049             :                  *
    1050             :                  * psig->stats_lock also protects us from our sub-theads
    1051             :                  * which can reap other children at the same time. Until
    1052             :                  * we change k_getrusage()-like users to rely on this lock
    1053             :                  * we have to take ->siglock as well.
    1054             :                  *
    1055             :                  * We use thread_group_cputime_adjusted() to get times for
    1056             :                  * the thread group, which consolidates times for all threads
    1057             :                  * in the group including the group leader.
    1058             :                  */
    1059           0 :                 thread_group_cputime_adjusted(p, &tgutime, &tgstime);
    1060           0 :                 spin_lock_irq(&current->sighand->siglock);
    1061           0 :                 write_seqlock(&psig->stats_lock);
    1062           0 :                 psig->cutime += tgutime + sig->cutime;
    1063           0 :                 psig->cstime += tgstime + sig->cstime;
    1064           0 :                 psig->cgtime += task_gtime(p) + sig->gtime + sig->cgtime;
    1065           0 :                 psig->cmin_flt +=
    1066           0 :                         p->min_flt + sig->min_flt + sig->cmin_flt;
    1067           0 :                 psig->cmaj_flt +=
    1068           0 :                         p->maj_flt + sig->maj_flt + sig->cmaj_flt;
    1069           0 :                 psig->cnvcsw +=
    1070           0 :                         p->nvcsw + sig->nvcsw + sig->cnvcsw;
    1071           0 :                 psig->cnivcsw +=
    1072           0 :                         p->nivcsw + sig->nivcsw + sig->cnivcsw;
    1073           0 :                 psig->cinblock +=
    1074           0 :                         task_io_get_inblock(p) +
    1075           0 :                         sig->inblock + sig->cinblock;
    1076           0 :                 psig->coublock +=
    1077           0 :                         task_io_get_oublock(p) +
    1078           0 :                         sig->oublock + sig->coublock;
    1079           0 :                 maxrss = max(sig->maxrss, sig->cmaxrss);
    1080           0 :                 if (psig->cmaxrss < maxrss)
    1081           0 :                         psig->cmaxrss = maxrss;
    1082           0 :                 task_io_accounting_add(&psig->ioac, &p->ioac);
    1083           0 :                 task_io_accounting_add(&psig->ioac, &sig->ioac);
    1084           0 :                 write_sequnlock(&psig->stats_lock);
    1085           0 :                 spin_unlock_irq(&current->sighand->siglock);
    1086             :         }
    1087             : 
    1088           0 :         if (wo->wo_rusage)
    1089           0 :                 getrusage(p, RUSAGE_BOTH, wo->wo_rusage);
    1090           0 :         status = (p->signal->flags & SIGNAL_GROUP_EXIT)
    1091           0 :                 ? p->signal->group_exit_code : p->exit_code;
    1092           0 :         wo->wo_stat = status;
    1093             : 
    1094           0 :         if (state == EXIT_TRACE) {
    1095           0 :                 write_lock_irq(&tasklist_lock);
    1096             :                 /* We dropped tasklist, ptracer could die and untrace */
    1097           0 :                 ptrace_unlink(p);
    1098             : 
    1099             :                 /* If parent wants a zombie, don't release it now */
    1100           0 :                 state = EXIT_ZOMBIE;
    1101           0 :                 if (do_notify_parent(p, p->exit_signal))
    1102           0 :                         state = EXIT_DEAD;
    1103           0 :                 p->exit_state = state;
    1104           0 :                 write_unlock_irq(&tasklist_lock);
    1105             :         }
    1106           0 :         if (state == EXIT_DEAD)
    1107           0 :                 release_task(p);
    1108             : 
    1109           0 : out_info:
    1110           0 :         infop = wo->wo_info;
    1111           0 :         if (infop) {
    1112           0 :                 if ((status & 0x7f) == 0) {
    1113           0 :                         infop->cause = CLD_EXITED;
    1114           0 :                         infop->status = status >> 8;
    1115             :                 } else {
    1116           0 :                         infop->cause = (status & 0x80) ? CLD_DUMPED : CLD_KILLED;
    1117           0 :                         infop->status = status & 0x7f;
    1118             :                 }
    1119           0 :                 infop->pid = pid;
    1120           0 :                 infop->uid = uid;
    1121             :         }
    1122             : 
    1123             :         return pid;
    1124             : }
    1125             : 
    1126           0 : static int *task_stopped_code(struct task_struct *p, bool ptrace)
    1127             : {
    1128           0 :         if (ptrace) {
    1129           0 :                 if (task_is_traced(p) && !(p->jobctl & JOBCTL_LISTENING))
    1130           0 :                         return &p->exit_code;
    1131             :         } else {
    1132           0 :                 if (p->signal->flags & SIGNAL_STOP_STOPPED)
    1133           0 :                         return &p->signal->group_exit_code;
    1134             :         }
    1135             :         return NULL;
    1136             : }
    1137             : 
    1138             : /**
    1139             :  * wait_task_stopped - Wait for %TASK_STOPPED or %TASK_TRACED
    1140             :  * @wo: wait options
    1141             :  * @ptrace: is the wait for ptrace
    1142             :  * @p: task to wait for
    1143             :  *
    1144             :  * Handle sys_wait4() work for %p in state %TASK_STOPPED or %TASK_TRACED.
    1145             :  *
    1146             :  * CONTEXT:
    1147             :  * read_lock(&tasklist_lock), which is released if return value is
    1148             :  * non-zero.  Also, grabs and releases @p->sighand->siglock.
    1149             :  *
    1150             :  * RETURNS:
    1151             :  * 0 if wait condition didn't exist and search for other wait conditions
    1152             :  * should continue.  Non-zero return, -errno on failure and @p's pid on
    1153             :  * success, implies that tasklist_lock is released and wait condition
    1154             :  * search should terminate.
    1155             :  */
    1156           0 : static int wait_task_stopped(struct wait_opts *wo,
    1157             :                                 int ptrace, struct task_struct *p)
    1158             : {
    1159           0 :         struct waitid_info *infop;
    1160           0 :         int exit_code, *p_code, why;
    1161           0 :         uid_t uid = 0; /* unneeded, required by compiler */
    1162           0 :         pid_t pid;
    1163             : 
    1164             :         /*
    1165             :          * Traditionally we see ptrace'd stopped tasks regardless of options.
    1166             :          */
    1167           0 :         if (!ptrace && !(wo->wo_flags & WUNTRACED))
    1168             :                 return 0;
    1169             : 
    1170           0 :         if (!task_stopped_code(p, ptrace))
    1171             :                 return 0;
    1172             : 
    1173           0 :         exit_code = 0;
    1174           0 :         spin_lock_irq(&p->sighand->siglock);
    1175             : 
    1176           0 :         p_code = task_stopped_code(p, ptrace);
    1177           0 :         if (unlikely(!p_code))
    1178           0 :                 goto unlock_sig;
    1179             : 
    1180           0 :         exit_code = *p_code;
    1181           0 :         if (!exit_code)
    1182           0 :                 goto unlock_sig;
    1183             : 
    1184           0 :         if (!unlikely(wo->wo_flags & WNOWAIT))
    1185           0 :                 *p_code = 0;
    1186             : 
    1187           0 :         uid = from_kuid_munged(current_user_ns(), task_uid(p));
    1188           0 : unlock_sig:
    1189           0 :         spin_unlock_irq(&p->sighand->siglock);
    1190           0 :         if (!exit_code)
    1191             :                 return 0;
    1192             : 
    1193             :         /*
    1194             :          * Now we are pretty sure this task is interesting.
    1195             :          * Make sure it doesn't get reaped out from under us while we
    1196             :          * give up the lock and then examine it below.  We don't want to
    1197             :          * keep holding onto the tasklist_lock while we call getrusage and
    1198             :          * possibly take page faults for user memory.
    1199             :          */
    1200           0 :         get_task_struct(p);
    1201           0 :         pid = task_pid_vnr(p);
    1202           0 :         why = ptrace ? CLD_TRAPPED : CLD_STOPPED;
    1203           0 :         read_unlock(&tasklist_lock);
    1204           0 :         sched_annotate_sleep();
    1205           0 :         if (wo->wo_rusage)
    1206           0 :                 getrusage(p, RUSAGE_BOTH, wo->wo_rusage);
    1207           0 :         put_task_struct(p);
    1208             : 
    1209           0 :         if (likely(!(wo->wo_flags & WNOWAIT)))
    1210           0 :                 wo->wo_stat = (exit_code << 8) | 0x7f;
    1211             : 
    1212           0 :         infop = wo->wo_info;
    1213           0 :         if (infop) {
    1214           0 :                 infop->cause = why;
    1215           0 :                 infop->status = exit_code;
    1216           0 :                 infop->pid = pid;
    1217           0 :                 infop->uid = uid;
    1218             :         }
    1219             :         return pid;
    1220             : }
    1221             : 
    1222             : /*
    1223             :  * Handle do_wait work for one task in a live, non-stopped state.
    1224             :  * read_lock(&tasklist_lock) on entry.  If we return zero, we still hold
    1225             :  * the lock and this task is uninteresting.  If we return nonzero, we have
    1226             :  * released the lock and the system call should return.
    1227             :  */
    1228           0 : static int wait_task_continued(struct wait_opts *wo, struct task_struct *p)
    1229             : {
    1230           0 :         struct waitid_info *infop;
    1231           0 :         pid_t pid;
    1232           0 :         uid_t uid;
    1233             : 
    1234           0 :         if (!unlikely(wo->wo_flags & WCONTINUED))
    1235             :                 return 0;
    1236             : 
    1237           0 :         if (!(p->signal->flags & SIGNAL_STOP_CONTINUED))
    1238             :                 return 0;
    1239             : 
    1240           0 :         spin_lock_irq(&p->sighand->siglock);
    1241             :         /* Re-check with the lock held.  */
    1242           0 :         if (!(p->signal->flags & SIGNAL_STOP_CONTINUED)) {
    1243           0 :                 spin_unlock_irq(&p->sighand->siglock);
    1244           0 :                 return 0;
    1245             :         }
    1246           0 :         if (!unlikely(wo->wo_flags & WNOWAIT))
    1247           0 :                 p->signal->flags &= ~SIGNAL_STOP_CONTINUED;
    1248           0 :         uid = from_kuid_munged(current_user_ns(), task_uid(p));
    1249           0 :         spin_unlock_irq(&p->sighand->siglock);
    1250             : 
    1251           0 :         pid = task_pid_vnr(p);
    1252           0 :         get_task_struct(p);
    1253           0 :         read_unlock(&tasklist_lock);
    1254           0 :         sched_annotate_sleep();
    1255           0 :         if (wo->wo_rusage)
    1256           0 :                 getrusage(p, RUSAGE_BOTH, wo->wo_rusage);
    1257           0 :         put_task_struct(p);
    1258             : 
    1259           0 :         infop = wo->wo_info;
    1260           0 :         if (!infop) {
    1261           0 :                 wo->wo_stat = 0xffff;
    1262             :         } else {
    1263           0 :                 infop->cause = CLD_CONTINUED;
    1264           0 :                 infop->pid = pid;
    1265           0 :                 infop->uid = uid;
    1266           0 :                 infop->status = SIGCONT;
    1267             :         }
    1268             :         return pid;
    1269             : }
    1270             : 
    1271             : /*
    1272             :  * Consider @p for a wait by @parent.
    1273             :  *
    1274             :  * -ECHILD should be in ->notask_error before the first call.
    1275             :  * Returns nonzero for a final return, when we have unlocked tasklist_lock.
    1276             :  * Returns zero if the search for a child should continue;
    1277             :  * then ->notask_error is 0 if @p is an eligible child,
    1278             :  * or still -ECHILD.
    1279             :  */
    1280           0 : static int wait_consider_task(struct wait_opts *wo, int ptrace,
    1281             :                                 struct task_struct *p)
    1282             : {
    1283             :         /*
    1284             :          * We can race with wait_task_zombie() from another thread.
    1285             :          * Ensure that EXIT_ZOMBIE -> EXIT_DEAD/EXIT_TRACE transition
    1286             :          * can't confuse the checks below.
    1287             :          */
    1288           0 :         int exit_state = READ_ONCE(p->exit_state);
    1289           0 :         int ret;
    1290             : 
    1291           0 :         if (unlikely(exit_state == EXIT_DEAD))
    1292             :                 return 0;
    1293             : 
    1294           0 :         ret = eligible_child(wo, ptrace, p);
    1295           0 :         if (!ret)
    1296             :                 return ret;
    1297             : 
    1298           0 :         if (unlikely(exit_state == EXIT_TRACE)) {
    1299             :                 /*
    1300             :                  * ptrace == 0 means we are the natural parent. In this case
    1301             :                  * we should clear notask_error, debugger will notify us.
    1302             :                  */
    1303           0 :                 if (likely(!ptrace))
    1304           0 :                         wo->notask_error = 0;
    1305           0 :                 return 0;
    1306             :         }
    1307             : 
    1308           0 :         if (likely(!ptrace) && unlikely(p->ptrace)) {
    1309             :                 /*
    1310             :                  * If it is traced by its real parent's group, just pretend
    1311             :                  * the caller is ptrace_do_wait() and reap this child if it
    1312             :                  * is zombie.
    1313             :                  *
    1314             :                  * This also hides group stop state from real parent; otherwise
    1315             :                  * a single stop can be reported twice as group and ptrace stop.
    1316             :                  * If a ptracer wants to distinguish these two events for its
    1317             :                  * own children it should create a separate process which takes
    1318             :                  * the role of real parent.
    1319             :                  */
    1320           0 :                 if (!ptrace_reparented(p))
    1321           0 :                         ptrace = 1;
    1322             :         }
    1323             : 
    1324             :         /* slay zombie? */
    1325           0 :         if (exit_state == EXIT_ZOMBIE) {
    1326             :                 /* we don't reap group leaders with subthreads */
    1327           0 :                 if (!delay_group_leader(p)) {
    1328             :                         /*
    1329             :                          * A zombie ptracee is only visible to its ptracer.
    1330             :                          * Notification and reaping will be cascaded to the
    1331             :                          * real parent when the ptracer detaches.
    1332             :                          */
    1333           0 :                         if (unlikely(ptrace) || likely(!p->ptrace))
    1334           0 :                                 return wait_task_zombie(wo, p);
    1335             :                 }
    1336             : 
    1337             :                 /*
    1338             :                  * Allow access to stopped/continued state via zombie by
    1339             :                  * falling through.  Clearing of notask_error is complex.
    1340             :                  *
    1341             :                  * When !@ptrace:
    1342             :                  *
    1343             :                  * If WEXITED is set, notask_error should naturally be
    1344             :                  * cleared.  If not, subset of WSTOPPED|WCONTINUED is set,
    1345             :                  * so, if there are live subthreads, there are events to
    1346             :                  * wait for.  If all subthreads are dead, it's still safe
    1347             :                  * to clear - this function will be called again in finite
    1348             :                  * amount time once all the subthreads are released and
    1349             :                  * will then return without clearing.
    1350             :                  *
    1351             :                  * When @ptrace:
    1352             :                  *
    1353             :                  * Stopped state is per-task and thus can't change once the
    1354             :                  * target task dies.  Only continued and exited can happen.
    1355             :                  * Clear notask_error if WCONTINUED | WEXITED.
    1356             :                  */
    1357           0 :                 if (likely(!ptrace) || (wo->wo_flags & (WCONTINUED | WEXITED)))
    1358           0 :                         wo->notask_error = 0;
    1359             :         } else {
    1360             :                 /*
    1361             :                  * @p is alive and it's gonna stop, continue or exit, so
    1362             :                  * there always is something to wait for.
    1363             :                  */
    1364           0 :                 wo->notask_error = 0;
    1365             :         }
    1366             : 
    1367             :         /*
    1368             :          * Wait for stopped.  Depending on @ptrace, different stopped state
    1369             :          * is used and the two don't interact with each other.
    1370             :          */
    1371           0 :         ret = wait_task_stopped(wo, ptrace, p);
    1372           0 :         if (ret)
    1373             :                 return ret;
    1374             : 
    1375             :         /*
    1376             :          * Wait for continued.  There's only one continued state and the
    1377             :          * ptracer can consume it which can confuse the real parent.  Don't
    1378             :          * use WCONTINUED from ptracer.  You don't need or want it.
    1379             :          */
    1380           0 :         return wait_task_continued(wo, p);
    1381             : }
    1382             : 
    1383             : /*
    1384             :  * Do the work of do_wait() for one thread in the group, @tsk.
    1385             :  *
    1386             :  * -ECHILD should be in ->notask_error before the first call.
    1387             :  * Returns nonzero for a final return, when we have unlocked tasklist_lock.
    1388             :  * Returns zero if the search for a child should continue; then
    1389             :  * ->notask_error is 0 if there were any eligible children,
    1390             :  * or still -ECHILD.
    1391             :  */
    1392           0 : static int do_wait_thread(struct wait_opts *wo, struct task_struct *tsk)
    1393             : {
    1394           0 :         struct task_struct *p;
    1395             : 
    1396           0 :         list_for_each_entry(p, &tsk->children, sibling) {
    1397           0 :                 int ret = wait_consider_task(wo, 0, p);
    1398             : 
    1399           0 :                 if (ret)
    1400           0 :                         return ret;
    1401             :         }
    1402             : 
    1403             :         return 0;
    1404             : }
    1405             : 
    1406           0 : static int ptrace_do_wait(struct wait_opts *wo, struct task_struct *tsk)
    1407             : {
    1408           0 :         struct task_struct *p;
    1409             : 
    1410           0 :         list_for_each_entry(p, &tsk->ptraced, ptrace_entry) {
    1411           0 :                 int ret = wait_consider_task(wo, 1, p);
    1412             : 
    1413           0 :                 if (ret)
    1414           0 :                         return ret;
    1415             :         }
    1416             : 
    1417             :         return 0;
    1418             : }
    1419             : 
    1420           0 : static int child_wait_callback(wait_queue_entry_t *wait, unsigned mode,
    1421             :                                 int sync, void *key)
    1422             : {
    1423           0 :         struct wait_opts *wo = container_of(wait, struct wait_opts,
    1424             :                                                 child_wait);
    1425           0 :         struct task_struct *p = key;
    1426             : 
    1427           0 :         if (!eligible_pid(wo, p))
    1428             :                 return 0;
    1429             : 
    1430           0 :         if ((wo->wo_flags & __WNOTHREAD) && wait->private != p->parent)
    1431             :                 return 0;
    1432             : 
    1433           0 :         return default_wake_function(wait, mode, sync, key);
    1434             : }
    1435             : 
    1436           0 : void __wake_up_parent(struct task_struct *p, struct task_struct *parent)
    1437             : {
    1438           0 :         __wake_up_sync_key(&parent->signal->wait_chldexit,
    1439             :                            TASK_INTERRUPTIBLE, p);
    1440           0 : }
    1441             : 
    1442           0 : static long do_wait(struct wait_opts *wo)
    1443             : {
    1444           0 :         struct task_struct *tsk;
    1445           0 :         int retval;
    1446             : 
    1447           0 :         trace_sched_process_wait(wo->wo_pid);
    1448             : 
    1449           0 :         init_waitqueue_func_entry(&wo->child_wait, child_wait_callback);
    1450           0 :         wo->child_wait.private = current;
    1451           0 :         add_wait_queue(&current->signal->wait_chldexit, &wo->child_wait);
    1452           0 : repeat:
    1453             :         /*
    1454             :          * If there is nothing that can match our criteria, just get out.
    1455             :          * We will clear ->notask_error to zero if we see any child that
    1456             :          * might later match our criteria, even if we are not able to reap
    1457             :          * it yet.
    1458             :          */
    1459           0 :         wo->notask_error = -ECHILD;
    1460           0 :         if ((wo->wo_type < PIDTYPE_MAX) &&
    1461           0 :            (!wo->wo_pid || !pid_has_task(wo->wo_pid, wo->wo_type)))
    1462           0 :                 goto notask;
    1463             : 
    1464           0 :         set_current_state(TASK_INTERRUPTIBLE);
    1465           0 :         read_lock(&tasklist_lock);
    1466           0 :         tsk = current;
    1467           0 :         do {
    1468           0 :                 retval = do_wait_thread(wo, tsk);
    1469           0 :                 if (retval)
    1470           0 :                         goto end;
    1471             : 
    1472           0 :                 retval = ptrace_do_wait(wo, tsk);
    1473           0 :                 if (retval)
    1474           0 :                         goto end;
    1475             : 
    1476           0 :                 if (wo->wo_flags & __WNOTHREAD)
    1477             :                         break;
    1478           0 :         } while_each_thread(current, tsk);
    1479           0 :         read_unlock(&tasklist_lock);
    1480             : 
    1481           0 : notask:
    1482           0 :         retval = wo->notask_error;
    1483           0 :         if (!retval && !(wo->wo_flags & WNOHANG)) {
    1484           0 :                 retval = -ERESTARTSYS;
    1485           0 :                 if (!signal_pending(current)) {
    1486           0 :                         schedule();
    1487           0 :                         goto repeat;
    1488             :                 }
    1489             :         }
    1490           0 : end:
    1491           0 :         __set_current_state(TASK_RUNNING);
    1492           0 :         remove_wait_queue(&current->signal->wait_chldexit, &wo->child_wait);
    1493           0 :         return retval;
    1494             : }
    1495             : 
    1496           0 : static long kernel_waitid(int which, pid_t upid, struct waitid_info *infop,
    1497             :                           int options, struct rusage *ru)
    1498             : {
    1499           0 :         struct wait_opts wo;
    1500           0 :         struct pid *pid = NULL;
    1501           0 :         enum pid_type type;
    1502           0 :         long ret;
    1503           0 :         unsigned int f_flags = 0;
    1504             : 
    1505           0 :         if (options & ~(WNOHANG|WNOWAIT|WEXITED|WSTOPPED|WCONTINUED|
    1506             :                         __WNOTHREAD|__WCLONE|__WALL))
    1507             :                 return -EINVAL;
    1508           0 :         if (!(options & (WEXITED|WSTOPPED|WCONTINUED)))
    1509             :                 return -EINVAL;
    1510             : 
    1511           0 :         switch (which) {
    1512             :         case P_ALL:
    1513             :                 type = PIDTYPE_MAX;
    1514             :                 break;
    1515           0 :         case P_PID:
    1516           0 :                 type = PIDTYPE_PID;
    1517           0 :                 if (upid <= 0)
    1518             :                         return -EINVAL;
    1519             : 
    1520           0 :                 pid = find_get_pid(upid);
    1521           0 :                 break;
    1522           0 :         case P_PGID:
    1523           0 :                 type = PIDTYPE_PGID;
    1524           0 :                 if (upid < 0)
    1525             :                         return -EINVAL;
    1526             : 
    1527           0 :                 if (upid)
    1528           0 :                         pid = find_get_pid(upid);
    1529             :                 else
    1530           0 :                         pid = get_task_pid(current, PIDTYPE_PGID);
    1531             :                 break;
    1532           0 :         case P_PIDFD:
    1533           0 :                 type = PIDTYPE_PID;
    1534           0 :                 if (upid < 0)
    1535             :                         return -EINVAL;
    1536             : 
    1537           0 :                 pid = pidfd_get_pid(upid, &f_flags);
    1538           0 :                 if (IS_ERR(pid))
    1539           0 :                         return PTR_ERR(pid);
    1540             : 
    1541             :                 break;
    1542             :         default:
    1543             :                 return -EINVAL;
    1544             :         }
    1545             : 
    1546           0 :         wo.wo_type      = type;
    1547           0 :         wo.wo_pid       = pid;
    1548           0 :         wo.wo_flags     = options;
    1549           0 :         wo.wo_info      = infop;
    1550           0 :         wo.wo_rusage    = ru;
    1551           0 :         if (f_flags & O_NONBLOCK)
    1552           0 :                 wo.wo_flags |= WNOHANG;
    1553             : 
    1554           0 :         ret = do_wait(&wo);
    1555           0 :         if (!ret && !(options & WNOHANG) && (f_flags & O_NONBLOCK))
    1556           0 :                 ret = -EAGAIN;
    1557             : 
    1558           0 :         put_pid(pid);
    1559           0 :         return ret;
    1560             : }
    1561             : 
    1562           0 : SYSCALL_DEFINE5(waitid, int, which, pid_t, upid, struct siginfo __user *,
    1563             :                 infop, int, options, struct rusage __user *, ru)
    1564             : {
    1565           0 :         struct rusage r;
    1566           0 :         struct waitid_info info = {.status = 0};
    1567           0 :         long err = kernel_waitid(which, upid, &info, options, ru ? &r : NULL);
    1568           0 :         int signo = 0;
    1569             : 
    1570           0 :         if (err > 0) {
    1571           0 :                 signo = SIGCHLD;
    1572           0 :                 err = 0;
    1573           0 :                 if (ru && copy_to_user(ru, &r, sizeof(struct rusage)))
    1574             :                         return -EFAULT;
    1575             :         }
    1576           0 :         if (!infop)
    1577             :                 return err;
    1578             : 
    1579           0 :         if (!user_write_access_begin(infop, sizeof(*infop)))
    1580             :                 return -EFAULT;
    1581             : 
    1582           0 :         unsafe_put_user(signo, &infop->si_signo, Efault);
    1583           0 :         unsafe_put_user(0, &infop->si_errno, Efault);
    1584           0 :         unsafe_put_user(info.cause, &infop->si_code, Efault);
    1585           0 :         unsafe_put_user(info.pid, &infop->si_pid, Efault);
    1586           0 :         unsafe_put_user(info.uid, &infop->si_uid, Efault);
    1587           0 :         unsafe_put_user(info.status, &infop->si_status, Efault);
    1588           0 :         user_write_access_end();
    1589           0 :         return err;
    1590           0 : Efault:
    1591             :         user_write_access_end();
    1592             :         return -EFAULT;
    1593             : }
    1594             : 
    1595           0 : long kernel_wait4(pid_t upid, int __user *stat_addr, int options,
    1596             :                   struct rusage *ru)
    1597             : {
    1598           0 :         struct wait_opts wo;
    1599           0 :         struct pid *pid = NULL;
    1600           0 :         enum pid_type type;
    1601           0 :         long ret;
    1602             : 
    1603           0 :         if (options & ~(WNOHANG|WUNTRACED|WCONTINUED|
    1604             :                         __WNOTHREAD|__WCLONE|__WALL))
    1605             :                 return -EINVAL;
    1606             : 
    1607             :         /* -INT_MIN is not defined */
    1608           0 :         if (upid == INT_MIN)
    1609             :                 return -ESRCH;
    1610             : 
    1611           0 :         if (upid == -1)
    1612             :                 type = PIDTYPE_MAX;
    1613           0 :         else if (upid < 0) {
    1614           0 :                 type = PIDTYPE_PGID;
    1615           0 :                 pid = find_get_pid(-upid);
    1616           0 :         } else if (upid == 0) {
    1617           0 :                 type = PIDTYPE_PGID;
    1618           0 :                 pid = get_task_pid(current, PIDTYPE_PGID);
    1619             :         } else /* upid > 0 */ {
    1620           0 :                 type = PIDTYPE_PID;
    1621           0 :                 pid = find_get_pid(upid);
    1622             :         }
    1623             : 
    1624           0 :         wo.wo_type      = type;
    1625           0 :         wo.wo_pid       = pid;
    1626           0 :         wo.wo_flags     = options | WEXITED;
    1627           0 :         wo.wo_info      = NULL;
    1628           0 :         wo.wo_stat      = 0;
    1629           0 :         wo.wo_rusage    = ru;
    1630           0 :         ret = do_wait(&wo);
    1631           0 :         put_pid(pid);
    1632           0 :         if (ret > 0 && stat_addr && put_user(wo.wo_stat, stat_addr))
    1633           0 :                 ret = -EFAULT;
    1634             : 
    1635             :         return ret;
    1636             : }
    1637             : 
    1638           0 : int kernel_wait(pid_t pid, int *stat)
    1639             : {
    1640           0 :         struct wait_opts wo = {
    1641             :                 .wo_type        = PIDTYPE_PID,
    1642           0 :                 .wo_pid         = find_get_pid(pid),
    1643             :                 .wo_flags       = WEXITED,
    1644             :         };
    1645           0 :         int ret;
    1646             : 
    1647           0 :         ret = do_wait(&wo);
    1648           0 :         if (ret > 0 && wo.wo_stat)
    1649           0 :                 *stat = wo.wo_stat;
    1650           0 :         put_pid(wo.wo_pid);
    1651           0 :         return ret;
    1652             : }
    1653             : 
    1654           0 : SYSCALL_DEFINE4(wait4, pid_t, upid, int __user *, stat_addr,
    1655             :                 int, options, struct rusage __user *, ru)
    1656             : {
    1657           0 :         struct rusage r;
    1658           0 :         long err = kernel_wait4(upid, stat_addr, options, ru ? &r : NULL);
    1659             : 
    1660           0 :         if (err > 0) {
    1661           0 :                 if (ru && copy_to_user(ru, &r, sizeof(struct rusage)))
    1662           0 :                         return -EFAULT;
    1663             :         }
    1664             :         return err;
    1665             : }
    1666             : 
    1667             : #ifdef __ARCH_WANT_SYS_WAITPID
    1668             : 
    1669             : /*
    1670             :  * sys_waitpid() remains for compatibility. waitpid() should be
    1671             :  * implemented by calling sys_wait4() from libc.a.
    1672             :  */
    1673           0 : SYSCALL_DEFINE3(waitpid, pid_t, pid, int __user *, stat_addr, int, options)
    1674             : {
    1675           0 :         return kernel_wait4(pid, stat_addr, options, NULL);
    1676             : }
    1677             : 
    1678             : #endif
    1679             : 
    1680             : #ifdef CONFIG_COMPAT
    1681           0 : COMPAT_SYSCALL_DEFINE4(wait4,
    1682             :         compat_pid_t, pid,
    1683             :         compat_uint_t __user *, stat_addr,
    1684             :         int, options,
    1685             :         struct compat_rusage __user *, ru)
    1686             : {
    1687           0 :         struct rusage r;
    1688           0 :         long err = kernel_wait4(pid, stat_addr, options, ru ? &r : NULL);
    1689           0 :         if (err > 0) {
    1690           0 :                 if (ru && put_compat_rusage(&r, ru))
    1691           0 :                         return -EFAULT;
    1692             :         }
    1693             :         return err;
    1694             : }
    1695             : 
    1696           0 : COMPAT_SYSCALL_DEFINE5(waitid,
    1697             :                 int, which, compat_pid_t, pid,
    1698             :                 struct compat_siginfo __user *, infop, int, options,
    1699             :                 struct compat_rusage __user *, uru)
    1700             : {
    1701           0 :         struct rusage ru;
    1702           0 :         struct waitid_info info = {.status = 0};
    1703           0 :         long err = kernel_waitid(which, pid, &info, options, uru ? &ru : NULL);
    1704           0 :         int signo = 0;
    1705           0 :         if (err > 0) {
    1706           0 :                 signo = SIGCHLD;
    1707           0 :                 err = 0;
    1708           0 :                 if (uru) {
    1709             :                         /* kernel_waitid() overwrites everything in ru */
    1710           0 :                         if (COMPAT_USE_64BIT_TIME)
    1711             :                                 err = copy_to_user(uru, &ru, sizeof(ru));
    1712             :                         else
    1713           0 :                                 err = put_compat_rusage(&ru, uru);
    1714           0 :                         if (err)
    1715             :                                 return -EFAULT;
    1716             :                 }
    1717             :         }
    1718             : 
    1719           0 :         if (!infop)
    1720             :                 return err;
    1721             : 
    1722           0 :         if (!user_write_access_begin(infop, sizeof(*infop)))
    1723             :                 return -EFAULT;
    1724             : 
    1725           0 :         unsafe_put_user(signo, &infop->si_signo, Efault);
    1726           0 :         unsafe_put_user(0, &infop->si_errno, Efault);
    1727           0 :         unsafe_put_user(info.cause, &infop->si_code, Efault);
    1728           0 :         unsafe_put_user(info.pid, &infop->si_pid, Efault);
    1729           0 :         unsafe_put_user(info.uid, &infop->si_uid, Efault);
    1730           0 :         unsafe_put_user(info.status, &infop->si_status, Efault);
    1731           0 :         user_write_access_end();
    1732           0 :         return err;
    1733           0 : Efault:
    1734             :         user_write_access_end();
    1735             :         return -EFAULT;
    1736             : }
    1737             : #endif
    1738             : 
    1739             : /**
    1740             :  * thread_group_exited - check that a thread group has exited
    1741             :  * @pid: tgid of thread group to be checked.
    1742             :  *
    1743             :  * Test if the thread group represented by tgid has exited (all
    1744             :  * threads are zombies, dead or completely gone).
    1745             :  *
    1746             :  * Return: true if the thread group has exited. false otherwise.
    1747             :  */
    1748           0 : bool thread_group_exited(struct pid *pid)
    1749             : {
    1750           0 :         struct task_struct *task;
    1751           0 :         bool exited;
    1752             : 
    1753           0 :         rcu_read_lock();
    1754           0 :         task = pid_task(pid, PIDTYPE_PID);
    1755           0 :         exited = !task ||
    1756           0 :                 (READ_ONCE(task->exit_state) && thread_group_empty(task));
    1757           0 :         rcu_read_unlock();
    1758             : 
    1759           0 :         return exited;
    1760             : }
    1761             : EXPORT_SYMBOL(thread_group_exited);
    1762             : 
    1763           0 : __weak void abort(void)
    1764             : {
    1765           0 :         BUG();
    1766             : 
    1767             :         /* if that doesn't kill us, halt */
    1768             :         panic("Oops failed to kill thread");
    1769             : }
    1770             : EXPORT_SYMBOL(abort);

Generated by: LCOV version 1.14