sched/debug: Use task_pid_nr_ns in /proc/$pid/sched
authorAleksa Sarai <asarai@suse.com>
Sun, 6 Aug 2017 04:41:41 +0000 (14:41 +1000)
committerIngo Molnar <mingo@kernel.org>
Thu, 10 Aug 2017 10:18:19 +0000 (12:18 +0200)
commit74dc3384fc7983b78cc46ebb1824968a3db85eb1
treee896440f183791c28162dd72dfb60470aac80d16
parent18f08dae19990f5fffde92e3a63e0d90cda0f1a8
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>
fs/proc/base.c
include/linux/sched/debug.h
kernel/sched/debug.c