aboutsummaryrefslogtreecommitdiffstats
path: root/fs/proc/base.c
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2008-02-08 07:18:31 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2008-02-08 12:22:23 -0500
commitee992744ea53db0a90c986fd0a70fbbf91e7f8bd (patch)
tree2d15727e92c407bb22c4842923cbfb2dfda82306 /fs/proc/base.c
parentbe614086a4aff163d5aa0dc160638d1193b59cde (diff)
proc: rewrite do_task_stat to correctly handle pid namespaces.
Currently (as pointed out by Oleg) do_task_stat has a race when calling task_pid_nr_ns with the task exiting. In addition do_task_stat is not currently displaying information in the context of the pid namespace that mounted the /proc filesystem. So "cut -d' ' -f 1 /proc/<pid>/stat" may not equal <pid>. This patch fixes the problem by converting to a single_open seq_file show method. Getting the pid namespace from the filesystem superblock instead of current, and simply using the the struct pid from the inode instead of attempting to get that same pid from the task. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Cc: Oleg Nesterov <oleg@tv-sign.ru> Cc: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/proc/base.c')
-rw-r--r--fs/proc/base.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/proc/base.c b/fs/proc/base.c
index f4b1e14bd95b..f77818ecaa8a 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -2280,7 +2280,7 @@ static const struct pid_entry tgid_base_stuff[] = {
2280 REG("sched", S_IRUGO|S_IWUSR, pid_sched), 2280 REG("sched", S_IRUGO|S_IWUSR, pid_sched),
2281#endif 2281#endif
2282 INF("cmdline", S_IRUGO, pid_cmdline), 2282 INF("cmdline", S_IRUGO, pid_cmdline),
2283 INF("stat", S_IRUGO, tgid_stat), 2283 ONE("stat", S_IRUGO, tgid_stat),
2284 INF("statm", S_IRUGO, pid_statm), 2284 INF("statm", S_IRUGO, pid_statm),
2285 REG("maps", S_IRUGO, maps), 2285 REG("maps", S_IRUGO, maps),
2286#ifdef CONFIG_NUMA 2286#ifdef CONFIG_NUMA
@@ -2611,7 +2611,7 @@ static const struct pid_entry tid_base_stuff[] = {
2611 REG("sched", S_IRUGO|S_IWUSR, pid_sched), 2611 REG("sched", S_IRUGO|S_IWUSR, pid_sched),
2612#endif 2612#endif
2613 INF("cmdline", S_IRUGO, pid_cmdline), 2613 INF("cmdline", S_IRUGO, pid_cmdline),
2614 INF("stat", S_IRUGO, tid_stat), 2614 ONE("stat", S_IRUGO, tid_stat),
2615 INF("statm", S_IRUGO, pid_statm), 2615 INF("statm", S_IRUGO, pid_statm),
2616 REG("maps", S_IRUGO, maps), 2616 REG("maps", S_IRUGO, maps),
2617#ifdef CONFIG_NUMA 2617#ifdef CONFIG_NUMA