From: Cong Wang <xiyou.wangcong@gmail.com>
To: linux-kernel@vger.kernel.org
Cc: Andrew Morton <akpm@linux-foundation.org>,
Cong Wang <xiyou.wangcong@gmail.com>,
Oleg Nesterov <oleg@redhat.com>,
Alexey Dobriyan <adobriyan@gmail.com>,
Al Viro <viro@zeniv.linux.org.uk>,
Vasiliy Kulikov <segoon@openwall.com>,
David Rientjes <rientjes@google.com>
Subject: [PATCH 2/6] proc: unify ptrace_may_access locking code
Date: Wed, 11 Apr 2012 13:59:23 +0800 [thread overview]
Message-ID: <1334123976-11681-2-git-send-email-xiyou.wangcong@gmail.com> (raw)
In-Reply-To: <1334123976-11681-1-git-send-email-xiyou.wangcong@gmail.com>
Unify mutex_lock+ptrace_may_access code and rename lock_trace()
to task_access_lock(), which better describes what it does.
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
---
fs/proc/base.c | 36 +++++++++++++++---------------------
1 files changed, 15 insertions(+), 21 deletions(-)
diff --git a/fs/proc/base.c b/fs/proc/base.c
index f3c4887..919d14c 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -281,19 +281,19 @@ static int proc_pid_wchan(struct task_struct *task, char *buffer)
}
#endif /* CONFIG_KALLSYMS */
-static int lock_trace(struct task_struct *task)
+static int task_access_lock(struct task_struct *task, unsigned int mode)
{
int err = mutex_lock_killable(&task->signal->cred_guard_mutex);
if (err)
return err;
- if (!ptrace_may_access(task, PTRACE_MODE_ATTACH)) {
+ if (!ptrace_may_access(task, mode)) {
mutex_unlock(&task->signal->cred_guard_mutex);
return -EPERM;
}
return 0;
}
-static void unlock_trace(struct task_struct *task)
+static void task_access_unlock(struct task_struct *task)
{
mutex_unlock(&task->signal->cred_guard_mutex);
}
@@ -319,7 +319,7 @@ static int proc_pid_stack(struct seq_file *m, struct pid_namespace *ns,
trace.entries = entries;
trace.skip = 0;
- err = lock_trace(task);
+ err = task_access_lock(task, PTRACE_MODE_ATTACH);
if (!err) {
save_stack_trace_tsk(task, &trace);
@@ -327,7 +327,7 @@ static int proc_pid_stack(struct seq_file *m, struct pid_namespace *ns,
seq_printf(m, "[<%pK>] %pS\n",
(void *)entries[i], (void *)entries[i]);
}
- unlock_trace(task);
+ task_access_unlock(task);
}
kfree(entries);
@@ -494,7 +494,7 @@ static int proc_pid_syscall(struct task_struct *task, char *buffer)
{
long nr;
unsigned long args[6], sp, pc;
- int res = lock_trace(task);
+ int res = task_access_lock(task, PTRACE_MODE_ATTACH);
if (res)
return res;
@@ -508,7 +508,7 @@ static int proc_pid_syscall(struct task_struct *task, char *buffer)
nr,
args[0], args[1], args[2], args[3], args[4], args[5],
sp, pc);
- unlock_trace(task);
+ task_access_unlock(task);
return res;
}
#endif /* CONFIG_HAVE_ARCH_TRACEHOOK */
@@ -2180,7 +2180,7 @@ static struct dentry *proc_map_files_lookup(struct inode *dir,
goto out;
result = ERR_PTR(-EACCES);
- if (lock_trace(task))
+ if (task_access_lock(task, PTRACE_MODE_ATTACH))
goto out_put_task;
result = ERR_PTR(-ENOENT);
@@ -2202,7 +2202,7 @@ out_no_vma:
up_read(&mm->mmap_sem);
mmput(mm);
out_unlock:
- unlock_trace(task);
+ task_access_unlock(task);
out_put_task:
put_task_struct(task);
out:
@@ -2236,7 +2236,7 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir)
goto out;
ret = -EACCES;
- if (lock_trace(task))
+ if (task_access_lock(task, PTRACE_MODE_ATTACH))
goto out_put_task;
ret = 0;
@@ -2336,7 +2336,7 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir)
}
out_unlock:
- unlock_trace(task);
+ task_access_unlock(task);
out_put_task:
put_task_struct(task);
out:
@@ -2897,15 +2897,10 @@ static int do_io_accounting(struct task_struct *task, char *buffer, int whole)
unsigned long flags;
int result;
- result = mutex_lock_killable(&task->signal->cred_guard_mutex);
+ result = task_access_lock(task, PTRACE_MODE_READ);
if (result)
return result;
- if (!ptrace_may_access(task, PTRACE_MODE_READ)) {
- result = -EACCES;
- goto out_unlock;
- }
-
if (whole && lock_task_sighand(task, &flags)) {
struct task_struct *t = task;
@@ -2930,8 +2925,7 @@ static int do_io_accounting(struct task_struct *task, char *buffer, int whole)
(unsigned long long)acct.read_bytes,
(unsigned long long)acct.write_bytes,
(unsigned long long)acct.cancelled_write_bytes);
-out_unlock:
- mutex_unlock(&task->signal->cred_guard_mutex);
+ task_access_unlock(task);
return result;
}
@@ -2949,10 +2943,10 @@ static int proc_tgid_io_accounting(struct task_struct *task, char *buffer)
static int proc_pid_personality(struct seq_file *m, struct pid_namespace *ns,
struct pid *pid, struct task_struct *task)
{
- int err = lock_trace(task);
+ int err = task_access_lock(task, PTRACE_MODE_ATTACH);
if (!err) {
seq_printf(m, "%08x\n", task->personality);
- unlock_trace(task);
+ task_access_unlock(task);
}
return err;
}
--
1.7.7.6
next prev parent reply other threads:[~2012-04-11 6:00 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-11 5:59 [PATCH 1/6 v3] proc: clean up /proc/<pid>/environ handling Cong Wang
2012-04-11 5:59 ` Cong Wang [this message]
2012-04-11 5:59 ` [PATCH 3/6] proc: remove mm_for_maps() Cong Wang
2012-04-12 0:38 ` Hugh Dickins
2012-04-11 5:59 ` [PATCH 4/6] proc: use mm_access() instead of ptrace_may_access() Cong Wang
2012-04-11 5:59 ` [PATCH 5/6] proc: use task_access_lock() " Cong Wang
2012-04-12 13:22 ` Cong Wang
2012-04-12 15:29 ` Djalal Harouni
2012-04-11 5:59 ` [PATCH 6/6] proc: use IS_ERR_OR_NULL() Cong Wang
2012-04-12 0:41 ` Hugh Dickins
2012-04-12 13:17 ` Cong Wang
2012-04-12 13:23 ` Alexey Dobriyan
2012-04-12 18:46 ` KOSAKI Motohiro
2012-04-12 19:26 ` Hugh Dickins
2012-04-12 19:31 ` Andrew Morton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1334123976-11681-2-git-send-email-xiyou.wangcong@gmail.com \
--to=xiyou.wangcong@gmail.com \
--cc=adobriyan@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=oleg@redhat.com \
--cc=rientjes@google.com \
--cc=segoon@openwall.com \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).