diff options
author | Joel Becker <jlbec@evilplan.org> | 2011-08-22 00:02:57 -0400 |
---|---|---|
committer | Joel Becker <jlbec@evilplan.org> | 2011-08-22 00:02:57 -0400 |
commit | 99b1bb61b225c3eb4d3b196d4f1d041695b19a7e (patch) | |
tree | 06cabdc34538f3b38a39e3b802ecc1a2ab2aae00 /fs/proc/base.c | |
parent | c7e25e6e0b0486492c5faaf6312b37413642c48e (diff) | |
parent | 93862d5e1ab875664c6cc95254fc365028a48bb1 (diff) |
Merge branch 'mw-3.1-jul25' of git://oss.oracle.com/git/smushran/linux-2.6 into ocfs2-fixes
Diffstat (limited to 'fs/proc/base.c')
-rw-r--r-- | fs/proc/base.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/fs/proc/base.c b/fs/proc/base.c index 14def991d9dd..91fb655a5cbf 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c | |||
@@ -216,7 +216,7 @@ static struct mm_struct *__check_mem_permission(struct task_struct *task) | |||
216 | if (task_is_stopped_or_traced(task)) { | 216 | if (task_is_stopped_or_traced(task)) { |
217 | int match; | 217 | int match; |
218 | rcu_read_lock(); | 218 | rcu_read_lock(); |
219 | match = (tracehook_tracer_task(task) == current); | 219 | match = (ptrace_parent(task) == current); |
220 | rcu_read_unlock(); | 220 | rcu_read_unlock(); |
221 | if (match && ptrace_may_access(task, PTRACE_MODE_ATTACH)) | 221 | if (match && ptrace_may_access(task, PTRACE_MODE_ATTACH)) |
222 | return mm; | 222 | return mm; |
@@ -673,7 +673,7 @@ static int mounts_open_common(struct inode *inode, struct file *file, | |||
673 | p->m.private = p; | 673 | p->m.private = p; |
674 | p->ns = ns; | 674 | p->ns = ns; |
675 | p->root = root; | 675 | p->root = root; |
676 | p->event = ns->event; | 676 | p->m.poll_event = ns->event; |
677 | 677 | ||
678 | return 0; | 678 | return 0; |
679 | 679 | ||
@@ -2167,13 +2167,9 @@ static const struct file_operations proc_fd_operations = { | |||
2167 | * /proc/pid/fd needs a special permission handler so that a process can still | 2167 | * /proc/pid/fd needs a special permission handler so that a process can still |
2168 | * access /proc/self/fd after it has executed a setuid(). | 2168 | * access /proc/self/fd after it has executed a setuid(). |
2169 | */ | 2169 | */ |
2170 | static int proc_fd_permission(struct inode *inode, int mask, unsigned int flags) | 2170 | static int proc_fd_permission(struct inode *inode, int mask) |
2171 | { | 2171 | { |
2172 | int rv; | 2172 | int rv = generic_permission(inode, mask); |
2173 | |||
2174 | if (flags & IPERM_FLAG_RCU) | ||
2175 | return -ECHILD; | ||
2176 | rv = generic_permission(inode, mask, flags, NULL); | ||
2177 | if (rv == 0) | 2173 | if (rv == 0) |
2178 | return 0; | 2174 | return 0; |
2179 | if (task_pid(current) == proc_pid(inode)) | 2175 | if (task_pid(current) == proc_pid(inode)) |
@@ -2712,6 +2708,9 @@ static int do_io_accounting(struct task_struct *task, char *buffer, int whole) | |||
2712 | struct task_io_accounting acct = task->ioac; | 2708 | struct task_io_accounting acct = task->ioac; |
2713 | unsigned long flags; | 2709 | unsigned long flags; |
2714 | 2710 | ||
2711 | if (!ptrace_may_access(task, PTRACE_MODE_READ)) | ||
2712 | return -EACCES; | ||
2713 | |||
2715 | if (whole && lock_task_sighand(task, &flags)) { | 2714 | if (whole && lock_task_sighand(task, &flags)) { |
2716 | struct task_struct *t = task; | 2715 | struct task_struct *t = task; |
2717 | 2716 | ||
@@ -2843,7 +2842,7 @@ static const struct pid_entry tgid_base_stuff[] = { | |||
2843 | REG("coredump_filter", S_IRUGO|S_IWUSR, proc_coredump_filter_operations), | 2842 | REG("coredump_filter", S_IRUGO|S_IWUSR, proc_coredump_filter_operations), |
2844 | #endif | 2843 | #endif |
2845 | #ifdef CONFIG_TASK_IO_ACCOUNTING | 2844 | #ifdef CONFIG_TASK_IO_ACCOUNTING |
2846 | INF("io", S_IRUGO, proc_tgid_io_accounting), | 2845 | INF("io", S_IRUSR, proc_tgid_io_accounting), |
2847 | #endif | 2846 | #endif |
2848 | #ifdef CONFIG_HARDWALL | 2847 | #ifdef CONFIG_HARDWALL |
2849 | INF("hardwall", S_IRUGO, proc_pid_hardwall), | 2848 | INF("hardwall", S_IRUGO, proc_pid_hardwall), |
@@ -3185,7 +3184,7 @@ static const struct pid_entry tid_base_stuff[] = { | |||
3185 | REG("make-it-fail", S_IRUGO|S_IWUSR, proc_fault_inject_operations), | 3184 | REG("make-it-fail", S_IRUGO|S_IWUSR, proc_fault_inject_operations), |
3186 | #endif | 3185 | #endif |
3187 | #ifdef CONFIG_TASK_IO_ACCOUNTING | 3186 | #ifdef CONFIG_TASK_IO_ACCOUNTING |
3188 | INF("io", S_IRUGO, proc_tid_io_accounting), | 3187 | INF("io", S_IRUSR, proc_tid_io_accounting), |
3189 | #endif | 3188 | #endif |
3190 | #ifdef CONFIG_HARDWALL | 3189 | #ifdef CONFIG_HARDWALL |
3191 | INF("hardwall", S_IRUGO, proc_pid_hardwall), | 3190 | INF("hardwall", S_IRUGO, proc_pid_hardwall), |