Commit 34258903 authored by Eric W. Biederman's avatar Eric W. Biederman Committed by Guo Mengqi
Browse files

exit: Use the correct exit_code in /proc/<pid>/stat

mainline inclusion
from mainline-v5.17-rc1
commit 2d18f7f4
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I9E2EL
CVE: CVE-2024-26686

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2d18f7f456209ed8a8fc138b8bc535dbdaf84695

--------------------------------

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: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: default avatarZhao Wenhui <zhaowenhui8@huawei.com>
parent 719747ca
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -462,6 +462,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;
@@ -525,6 +526,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);
@@ -626,7 +630,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");