diff options
author | Oleg Nesterov <oleg@redhat.com> | 2014-01-24 03:55:39 +0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-01-24 04:37:01 +0400 |
commit | d855a4b79f49ea07d1827fc0591490a6a324148b (patch) | |
tree | f1169b0bc68f35548a3fd05c8b5da91814c38f8b /fs/internal.h | |
parent | c986c14a6a88427946dc77d7018a81b95b3d41b6 (diff) | |
download | linux-d855a4b79f49ea07d1827fc0591490a6a324148b.tar.xz |
proc: don't (ab)use ->group_leader in proc_task_readdir() paths
proc_task_readdir() does not really need "leader", first_tid() has to
revalidate it anyway. Just pass proc_pid(inode) to first_tid() instead,
it can do pid_task(PIDTYPE_PID) itself and read ->group_leader only if
necessary.
The patch also extracts the "inode is dead" code from
pid_delete_dentry(dentry) into the new trivial helper,
proc_inode_is_dead(inode), proc_task_readdir() uses it to return -ENOENT
if this dir was removed.
This is a bit racy, but the race is very inlikely and the getdents() after
openndir() can see the empty "." + ".." dir only once.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Michal Hocko <mhocko@suse.cz>
Cc: Sameer Nanda <snanda@chromium.org>
Cc: Sergey Dyasly <dserrg@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/internal.h')
0 files changed, 0 insertions, 0 deletions