OSDN Git Service

exit: Use the correct exit_code in /proc/<pid>/stat
authorEric W. Biederman <ebiederm@xmission.com>
Tue, 21 Dec 2021 01:16:34 +0000 (19:16 -0600)
committerEric W. Biederman <ebiederm@xmission.com>
Sat, 8 Jan 2022 18:43:57 +0000 (12:43 -0600)
Since do_proc_statt was modified to return process wide values instead
of per task values the exit_code calculation has never been updated.
Update it now to return the process wide exit_code when it is requested
and available.

History-Tree: https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git
Fixes: bf719d26a5c1 ("[PATCH] distinct tgid/tid CPU usage")
Link: https://lkml.kernel.org/r/20220103213312.9144-4-ebiederm@xmission.com
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
fs/proc/array.c

index ff869a6..43a7abd 100644 (file)
@@ -468,6 +468,7 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
        u64 cgtime, gtime;
        unsigned long rsslim = 0;
        unsigned long flags;
+       int exit_code = task->exit_code;
 
        state = *get_task_state(task);
        vsize = eip = esp = 0;
@@ -531,6 +532,9 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
                        maj_flt += sig->maj_flt;
                        thread_group_cputime_adjusted(task, &utime, &stime);
                        gtime += sig->gtime;
+
+                       if (sig->flags & (SIGNAL_GROUP_EXIT | SIGNAL_STOP_STOPPED))
+                               exit_code = sig->group_exit_code;
                }
 
                sid = task_session_nr_ns(task, ns);
@@ -630,7 +634,7 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
                seq_puts(m, " 0 0 0 0 0 0 0");
 
        if (permitted)
-               seq_put_decimal_ll(m, " ", task->exit_code);
+               seq_put_decimal_ll(m, " ", exit_code);
        else
                seq_puts(m, " 0");