From fac0cc03a0365ec277efa21c244972e1fd35c327 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sun, 27 Mar 2011 19:09:29 -0700 Subject: [PATCH] proc: fix oops on invalid /proc//maps access, CVE-2011-1020 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit When m_start returns an error, the seq_file logic will still call m_stop with that error entry, so we'd better make sure that we check it before using it as a vma. Introduced by commit ec6fd8a4355c ("report errors in /proc/*/*map* sanely"), which replaced NULL with various ERR_PTR() cases. (On ia64, you happen to get a unaligned fault instead of a page fault, since the address used is generally some random error code like -EPERM) Reported-by: Anca Emanuel Reported-by: Tony Luck Cc: Al Viro Cc: Américo Wang Cc: Stephen Wilson Signed-off-by: Linus Torvalds (cherry picked from commit 76597cd31470fa130784c78fadb4dab2e624a723) CVE-2011-1020 BugLink: http://bugs.launchpad.net/bugs/813026 Signed-off-by: Tim Gardner --- fs/proc/task_mmu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 77e7bb9..7f5e572 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -180,7 +180,8 @@ static void m_stop(struct seq_file *m, void *v) struct proc_maps_private *priv = m->private; struct vm_area_struct *vma = v; - vma_stop(priv, vma); + if (!IS_ERR(vma)) + vma_stop(priv, vma); if (priv->task) put_task_struct(priv->task); } -- 1.7.10.4