Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1946815AbXBJBCa (ORCPT ); Fri, 9 Feb 2007 20:02:30 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1946821AbXBJBCa (ORCPT ); Fri, 9 Feb 2007 20:02:30 -0500 Received: from smtp-out.google.com ([216.239.45.13]:54537 "EHLO smtp-out.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1946815AbXBJBCU (ORCPT ); Fri, 9 Feb 2007 20:02:20 -0500 DomainKey-Signature: a=rsa-sha1; s=beta; d=google.com; c=nofws; q=dns; h=received:date:from:x-x-sender:to:cc:subject:in-reply-to: message-id:references:mime-version:content-type; b=JN0B1T1x2KJBBUPkconictq13qYVC1vxQeE/G2iWhUi+kOF/Pv1tVlEWJmOGuRtk+ 33gX8AzJrcgDZnbDFV9Ug== Date: Fri, 9 Feb 2007 17:01:54 -0800 (PST) From: David Rientjes X-X-Sender: rientjes@chino.kir.corp.google.com To: Oleg Nesterov cc: Hugh Dickins , Paul Mundt , Christoph Lameter , Andrew Morton , linux-kernel@vger.kernel.org Subject: Re: + smaps-add-clear_refs-file-to-clear-reference.patch added to -mm tree In-Reply-To: <20070210003958.GA3047@tv-sign.ru> Message-ID: References: <20070210003958.GA3047@tv-sign.ru> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1379 Lines: 44 Do not clear references when the task_struct's mm is NULL by using /proc/pid/clear_refs. Also, use mmap_sem since the mm_struct's VMA's are being iterated in fs/proc/task_mmu.c. Reported by Oleg Nesterov . Signed-off-by: David Rientjes --- fs/proc/base.c | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/fs/proc/base.c b/fs/proc/base.c --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -719,6 +719,7 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { struct task_struct *task; + struct mm_struct *mm; char buffer[PROC_NUMBUF], *end; memset(buffer, 0, sizeof(buffer)); @@ -733,7 +734,13 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, task = get_proc_task(file->f_path.dentry->d_inode); if (!task) return -ESRCH; - clear_refs_smap(task->mm->mmap); + mm = get_task_mm(task); + if (mm) { + down_read(&mm->mmap_sem); + clear_refs_smap(mm->mmap); + up_read(&mm->mmap_sem); + mmput(mm); + } put_task_struct(task); if (end - buffer == 0) return -EIO; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/