diff options
| -rw-r--r-- | fs/proc/base.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/fs/proc/base.c b/fs/proc/base.c index 1c8b280146d7..8e139c90f9fd 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c | |||
| @@ -2177,16 +2177,16 @@ static struct dentry *proc_map_files_lookup(struct inode *dir, | |||
| 2177 | goto out; | 2177 | goto out; |
| 2178 | 2178 | ||
| 2179 | result = ERR_PTR(-EACCES); | 2179 | result = ERR_PTR(-EACCES); |
| 2180 | if (lock_trace(task)) | 2180 | if (!ptrace_may_access(task, PTRACE_MODE_READ)) |
| 2181 | goto out_put_task; | 2181 | goto out_put_task; |
| 2182 | 2182 | ||
| 2183 | result = ERR_PTR(-ENOENT); | 2183 | result = ERR_PTR(-ENOENT); |
| 2184 | if (dname_to_vma_addr(dentry, &vm_start, &vm_end)) | 2184 | if (dname_to_vma_addr(dentry, &vm_start, &vm_end)) |
| 2185 | goto out_unlock; | 2185 | goto out_put_task; |
| 2186 | 2186 | ||
| 2187 | mm = get_task_mm(task); | 2187 | mm = get_task_mm(task); |
| 2188 | if (!mm) | 2188 | if (!mm) |
| 2189 | goto out_unlock; | 2189 | goto out_put_task; |
| 2190 | 2190 | ||
| 2191 | down_read(&mm->mmap_sem); | 2191 | down_read(&mm->mmap_sem); |
| 2192 | vma = find_exact_vma(mm, vm_start, vm_end); | 2192 | vma = find_exact_vma(mm, vm_start, vm_end); |
| @@ -2198,8 +2198,6 @@ static struct dentry *proc_map_files_lookup(struct inode *dir, | |||
| 2198 | out_no_vma: | 2198 | out_no_vma: |
| 2199 | up_read(&mm->mmap_sem); | 2199 | up_read(&mm->mmap_sem); |
| 2200 | mmput(mm); | 2200 | mmput(mm); |
| 2201 | out_unlock: | ||
| 2202 | unlock_trace(task); | ||
| 2203 | out_put_task: | 2201 | out_put_task: |
| 2204 | put_task_struct(task); | 2202 | put_task_struct(task); |
| 2205 | out: | 2203 | out: |
| @@ -2233,7 +2231,7 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir) | |||
| 2233 | goto out; | 2231 | goto out; |
| 2234 | 2232 | ||
| 2235 | ret = -EACCES; | 2233 | ret = -EACCES; |
| 2236 | if (lock_trace(task)) | 2234 | if (!ptrace_may_access(task, PTRACE_MODE_READ)) |
| 2237 | goto out_put_task; | 2235 | goto out_put_task; |
| 2238 | 2236 | ||
| 2239 | ret = 0; | 2237 | ret = 0; |
| @@ -2241,12 +2239,12 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir) | |||
| 2241 | case 0: | 2239 | case 0: |
| 2242 | ino = inode->i_ino; | 2240 | ino = inode->i_ino; |
| 2243 | if (filldir(dirent, ".", 1, 0, ino, DT_DIR) < 0) | 2241 | if (filldir(dirent, ".", 1, 0, ino, DT_DIR) < 0) |
| 2244 | goto out_unlock; | 2242 | goto out_put_task; |
| 2245 | filp->f_pos++; | 2243 | filp->f_pos++; |
| 2246 | case 1: | 2244 | case 1: |
| 2247 | ino = parent_ino(dentry); | 2245 | ino = parent_ino(dentry); |
| 2248 | if (filldir(dirent, "..", 2, 1, ino, DT_DIR) < 0) | 2246 | if (filldir(dirent, "..", 2, 1, ino, DT_DIR) < 0) |
| 2249 | goto out_unlock; | 2247 | goto out_put_task; |
| 2250 | filp->f_pos++; | 2248 | filp->f_pos++; |
| 2251 | default: | 2249 | default: |
| 2252 | { | 2250 | { |
| @@ -2257,7 +2255,7 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir) | |||
| 2257 | 2255 | ||
| 2258 | mm = get_task_mm(task); | 2256 | mm = get_task_mm(task); |
| 2259 | if (!mm) | 2257 | if (!mm) |
| 2260 | goto out_unlock; | 2258 | goto out_put_task; |
| 2261 | down_read(&mm->mmap_sem); | 2259 | down_read(&mm->mmap_sem); |
| 2262 | 2260 | ||
| 2263 | nr_files = 0; | 2261 | nr_files = 0; |
| @@ -2287,7 +2285,7 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir) | |||
| 2287 | flex_array_free(fa); | 2285 | flex_array_free(fa); |
| 2288 | up_read(&mm->mmap_sem); | 2286 | up_read(&mm->mmap_sem); |
| 2289 | mmput(mm); | 2287 | mmput(mm); |
| 2290 | goto out_unlock; | 2288 | goto out_put_task; |
| 2291 | } | 2289 | } |
| 2292 | for (i = 0, vma = mm->mmap, pos = 2; vma; | 2290 | for (i = 0, vma = mm->mmap, pos = 2; vma; |
| 2293 | vma = vma->vm_next) { | 2291 | vma = vma->vm_next) { |
| @@ -2332,8 +2330,6 @@ proc_map_files_readdir(struct file *filp, void *dirent, filldir_t filldir) | |||
| 2332 | } | 2330 | } |
| 2333 | } | 2331 | } |
| 2334 | 2332 | ||
| 2335 | out_unlock: | ||
| 2336 | unlock_trace(task); | ||
| 2337 | out_put_task: | 2333 | out_put_task: |
| 2338 | put_task_struct(task); | 2334 | put_task_struct(task); |
| 2339 | out: | 2335 | out: |
