diff options
Diffstat (limited to 'fs/proc/base.c')
-rw-r--r-- | fs/proc/base.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/fs/proc/base.c b/fs/proc/base.c index 14def991d9dd..fc5bc2767692 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c | |||
@@ -2169,11 +2169,7 @@ static const struct file_operations proc_fd_operations = { | |||
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, unsigned int flags) |
2171 | { | 2171 | { |
2172 | int rv; | 2172 | int rv = generic_permission(inode, mask, flags, NULL); |
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), |