[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1334123976-11681-2-git-send-email-xiyou.wangcong@gmail.com>
Date: Wed, 11 Apr 2012 13:59:23 +0800
From: Cong Wang <xiyou.wangcong@...il.com>
To: linux-kernel@...r.kernel.org
Cc: Andrew Morton <akpm@...ux-foundation.org>,
Cong Wang <xiyou.wangcong@...il.com>,
Oleg Nesterov <oleg@...hat.com>,
Alexey Dobriyan <adobriyan@...il.com>,
Al Viro <viro@...iv.linux.org.uk>,
Vasiliy Kulikov <segoon@...nwall.com>,
David Rientjes <rientjes@...gle.com>
Subject: [PATCH 2/6] proc: unify ptrace_may_access locking code
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@...hat.com>
Cc: Alexey Dobriyan <adobriyan@...il.com>
Signed-off-by: Cong Wang <xiyou.wangcong@...il.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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists