From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andy Lutomirski Subject: [PATCH 1/3] proc: Stop reporting eip and esp in /proc/PID/stat Date: Fri, 30 Sep 2016 10:58:56 -0700 Message-ID: References: Return-path: In-Reply-To: In-Reply-To: References: Sender: linux-api-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Brian Gerst , Borislav Petkov , Jann Horn , Linux API , Linus Torvalds , Kees Cook , Tycho Andersen , Andy Lutomirski , Tetsuo Handa List-Id: linux-api@vger.kernel.org Reporting these fields on a non-current task is dangerous. If the task is in any state other than normal kernel code, they may contain garbage or even kernel addresses on some architectures. (x86_64 used to do this. I bet lots of architectures still do.) With CONFIG_THREAD_INFO_IN_TASK, it can OOPS, too. As far as I know, there are no use programs that make any material use of these fields, so just get rid of them. Cc: Tetsuo Handa Cc: Tycho Andersen Cc: Kees Cook Reported-by: Jann Horn Signed-off-by: Andy Lutomirski --- fs/proc/array.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/fs/proc/array.c b/fs/proc/array.c index 88c7de12197b..1bb1097e73b7 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c @@ -417,10 +417,11 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns, mm = get_task_mm(task); if (mm) { vsize = task_vsize(mm); - if (permitted) { - eip = KSTK_EIP(task); - esp = KSTK_ESP(task); - } + /* + * esp and eip are intentionally zeroed out. There is no + * non-racy way to read them without freezing the task. + * Programs that need reliable values can use ptrace(2). + */ } get_task_comm(tcomm, task); -- 2.7.4