From: ebiederm@xmission.com (Eric W. Biederman)
To: Aleksa Sarai <asarai@suse.com>
Cc: Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
cyphar@cyphar.com, linux-kernel@vger.kernel.org,
stable@vger.kernel.org, Jess Frazelle <acidburn@google.com>
Subject: Re: [PATCH v2] sched: debug: use task_pid_nr_ns in /proc/$pid/sched
Date: Sun, 06 Aug 2017 09:56:01 -0500 [thread overview]
Message-ID: <87a83ciw3i.fsf@xmission.com> (raw)
In-Reply-To: <20170806044141.5093-1-asarai@suse.com> (Aleksa Sarai's message of "Sun, 6 Aug 2017 14:41:41 +1000")
Aleksa Sarai <asarai@suse.com> writes:
> 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[1]). This lead 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.
>
> [1]: https://github.com/jessfraz/amicontained
>
> Cc: <stable@vger.kernel.org>
> Cc: Jess Frazelle <acidburn@google.com>
> Signed-off-by: Aleksa Sarai <asarai@suse.com>
Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>
> ---
> fs/proc/base.c | 3 ++-
> include/linux/sched/debug.h | 4 +++-
> kernel/sched/debug.c | 5 +++--
> 3 files changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/fs/proc/base.c b/fs/proc/base.c
> index 719c2e943ea1..98fd8f6df851 100644
> --- a/fs/proc/base.c
> +++ b/fs/proc/base.c
> @@ -1408,12 +1408,13 @@ static const struct file_operations proc_fail_nth_operations = {
> static int sched_show(struct seq_file *m, void *v)
> {
> struct inode *inode = m->private;
> + struct pid_namespace *ns = inode->i_sb->s_fs_info;
> struct task_struct *p;
>
> p = get_proc_task(inode);
> if (!p)
> return -ESRCH;
> - proc_sched_show_task(p, m);
> + proc_sched_show_task(p, ns, m);
>
> put_task_struct(p);
>
> 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 @@
> */
>
> struct task_struct;
> +struct pid_namespace;
>
> extern void dump_cpu_task(int cpu);
>
> @@ -34,7 +35,8 @@ extern void sched_show_task(struct task_struct *p);
>
> #ifdef CONFIG_SCHED_DEBUG
> struct seq_file;
> -extern void proc_sched_show_task(struct task_struct *p, struct seq_file *m);
> +extern void proc_sched_show_task(struct task_struct *p,
> + struct pid_namespace *ns, struct seq_file *m);
> extern void proc_sched_set_task(struct task_struct *p);
> #endif
>
> diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
> index 4fa66de52bd6..ac345115877b 100644
> --- a/kernel/sched/debug.c
> +++ b/kernel/sched/debug.c
> @@ -872,11 +872,12 @@ static void sched_show_numa(struct task_struct *p, struct seq_file *m)
> #endif
> }
>
> -void proc_sched_show_task(struct task_struct *p, struct seq_file *m)
> +void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns,
> + struct seq_file *m)
> {
> unsigned long nr_switches;
>
> - SEQ_printf(m, "%s (%d, #threads: %d)\n", p->comm, task_pid_nr(p),
> + SEQ_printf(m, "%s (%d, #threads: %d)\n", p->comm, task_pid_nr_ns(p, ns),
> get_nr_threads(p));
> SEQ_printf(m,
> "---------------------------------------------------------"
next prev parent reply other threads:[~2017-08-06 15:04 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-06 4:41 [PATCH v2] sched: debug: use task_pid_nr_ns in /proc/$pid/sched Aleksa Sarai
2017-08-06 14:56 ` Eric W. Biederman [this message]
2017-08-07 8:44 ` Peter Zijlstra
2017-08-07 15:18 ` Jessie Frazelle
2017-08-08 15:17 ` Eric W. Biederman
2017-08-10 12:09 ` [tip:sched/core] sched/debug: Use " tip-bot for Aleksa Sarai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87a83ciw3i.fsf@xmission.com \
--to=ebiederm@xmission.com \
--cc=acidburn@google.com \
--cc=asarai@suse.com \
--cc=cyphar@cyphar.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.