From 8c5b7e024911ca626242e4d3f6612d4820eaae16 Mon Sep 17 00:00:00 2001 From: KOSAKI Motohiro Date: Thu, 26 May 2011 16:25:52 -0700 Subject: [PATCH] --- yaml --- r: 252057 b: refs/heads/master c: 30cd8903913dac7b0918807cac46be3ecde5a5a7 h: refs/heads/master i: 252055: 27c2bb1891dbd3545bc5c380d79e5e3fe22c20c1 v: v3 --- [refs] | 2 +- trunk/fs/proc/base.c | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 1e26e10fc445..909f26821125 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a4dbf0ec2aa3e8aca6e63f598095750c232d50f1 +refs/heads/master: 30cd8903913dac7b0918807cac46be3ecde5a5a7 diff --git a/trunk/fs/proc/base.c b/trunk/fs/proc/base.c index 0c2c50cc2cca..4ede550517a6 100644 --- a/trunk/fs/proc/base.c +++ b/trunk/fs/proc/base.c @@ -894,20 +894,20 @@ static ssize_t mem_write(struct file * file, const char __user *buf, if (!task) goto out_no_task; + copied = -ENOMEM; + page = (char *)__get_free_page(GFP_TEMPORARY); + if (!page) + goto out_task; + mm = check_mem_permission(task); copied = PTR_ERR(mm); if (IS_ERR(mm)) - goto out_task; + goto out_free; copied = -EIO; if (file->private_data != (void *)((long)current->self_exec_id)) goto out_mm; - copied = -ENOMEM; - page = (char *)__get_free_page(GFP_TEMPORARY); - if (!page) - goto out_mm; - copied = 0; while (count > 0) { int this_len, retval; @@ -929,9 +929,11 @@ static ssize_t mem_write(struct file * file, const char __user *buf, count -= retval; } *ppos = dst; - free_page((unsigned long) page); + out_mm: mmput(mm); +out_free: + free_page((unsigned long) page); out_task: put_task_struct(task); out_no_task: