Messages in this thread Patch in this message | | | Date | Fri, 9 Feb 2007 17:01:54 -0800 (PST) | From | David Rientjes <> | Subject | Re: + smaps-add-clear_refs-file-to-clear-reference.patch added to -mm tree |
| |
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 <oleg@tv-sign.ru>.
Signed-off-by: David Rientjes <rientjes@google.com> --- 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/
| |