diff options
author | Aleksa Sarai <asarai@suse.com> | 2017-08-06 00:41:41 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2017-08-10 06:18:19 -0400 |
commit | 74dc3384fc7983b78cc46ebb1824968a3db85eb1 (patch) | |
tree | e896440f183791c28162dd72dfb60470aac80d16 /include/linux/sched/debug.h | |
parent | 18f08dae19990f5fffde92e3a63e0d90cda0f1a8 (diff) |
sched/debug: Use task_pid_nr_ns in /proc/$pid/sched
It appears as though the addition of the PID namespace did not update
the output code for /proc/*/sched, which resulted in it providing PIDs
that were not self-consistent with the /proc mount. This additionally
made it trivial to detect whether a process was inside &init_pid_ns from
userspace, making container detection trivial:
https://github.com/jessfraz/amicontained
This leads to situations such as:
% unshare -pmf
% mount -t proc proc /proc
% head -n1 /proc/1/sched
head (10047, #threads: 1)
Fix this by just using task_pid_nr_ns for the output of /proc/*/sched.
All of the other uses of task_pid_nr in kernel/sched/debug.c are from a
sysctl context and thus don't need to be namespaced.
Signed-off-by: Aleksa Sarai <asarai@suse.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Eric W. Biederman <ebiederm@xmission.com>
Cc: Jess Frazelle <acidburn@google.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: cyphar@cyphar.com
Link: http://lkml.kernel.org/r/20170806044141.5093-1-asarai@suse.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'include/linux/sched/debug.h')
-rw-r--r-- | include/linux/sched/debug.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/include/linux/sched/debug.h b/include/linux/sched/debug.h index e0eaee54c5a4..5d58d49e9f87 100644 --- a/include/linux/sched/debug.h +++ b/include/linux/sched/debug.h | |||
@@ -6,6 +6,7 @@ | |||
6 | */ | 6 | */ |
7 | 7 | ||
8 | struct task_struct; | 8 | struct task_struct; |
9 | struct pid_namespace; | ||
9 | 10 | ||
10 | extern void dump_cpu_task(int cpu); | 11 | extern void dump_cpu_task(int cpu); |
11 | 12 | ||
@@ -34,7 +35,8 @@ extern void sched_show_task(struct task_struct *p); | |||
34 | 35 | ||
35 | #ifdef CONFIG_SCHED_DEBUG | 36 | #ifdef CONFIG_SCHED_DEBUG |
36 | struct seq_file; | 37 | struct seq_file; |
37 | extern void proc_sched_show_task(struct task_struct *p, struct seq_file *m); | 38 | extern void proc_sched_show_task(struct task_struct *p, |
39 | struct pid_namespace *ns, struct seq_file *m); | ||
38 | extern void proc_sched_set_task(struct task_struct *p); | 40 | extern void proc_sched_set_task(struct task_struct *p); |
39 | #endif | 41 | #endif |
40 | 42 | ||