Re: [PATCH v2 1/2] pidfd: show pids for nested pid namespaces in fdinfo
flat view
From: Christian Brauner <hidden>
Date: 2019-10-09 17:29:53
Also in:
lkml
On Wed, Oct 09, 2019 at 06:05:30PM +0200, Christian Kellner wrote:
quoted hunk ↗ jump to hunk
From: Christian Kellner <redacted> The fdinfo file for a process file descriptor already contains the pid of the process in the callers namespaces. Additionally, if pid namespaces are configured, show the process ids of the process in all nested namespaces in the same format as in the procfs status file, i.e. "NSPid:\t%d\%d...". This allows the easy identification of the processes in nested namespaces. Signed-off-by: Christian Kellner <redacted> --- Changes in v2: - Moved into separate function to avoid multiple ifdefs as suggested by Michal Hocko kernel/fork.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)diff --git a/kernel/fork.c b/kernel/fork.c index 5a0fd518e04e..f7a59ef046e9 100644 --- a/kernel/fork.c +++ b/kernel/fork.c@@ -1681,12 +1681,27 @@ static int pidfd_release(struct inode *inode, struct file *file) } #ifdef CONFIG_PROC_FS +static void pidfd_nspid(struct seq_file *m, struct pid *pid)
If it has to be a separate helper then please make it:
static inline void print_pidfd_nspid(struct seq_file *m, struct pid_namespace *ns, struct pid *pid)
{
#ifdef CONFIG_PID_NS
int i;
seq_puts(m, "\nNSpid:");
for (i = ns->level; i <= pid->level; i++) {
ns = pid->numbers[i].ns;
seq_put_decimal_ull(m, "\t", pid_nr_ns(pid, ns));
}
#endif
}
It's called nowhere else and we've already retrieved the pid_namespace
in pidfd_show_fdinfo().
+{
+#ifdef CONFIG_PID_NS
+ struct pid_namespace *ns = proc_pid_ns(file_inode(m->file));
+ int i;
+
+ seq_puts(m, "\nNSpid:");
+ for (i = ns->level; i <= pid->level; i++) {
+ ns = pid->numbers[i].ns;
+ seq_put_decimal_ull(m, "\t", pid_nr_ns(pid, ns));
+ }
+#endif
+}
+
static void pidfd_show_fdinfo(struct seq_file *m, struct file *f)
{
struct pid_namespace *ns = proc_pid_ns(file_inode(m->file));
struct pid *pid = f->private_data;
seq_put_decimal_ull(m, "Pid:\t", pid_nr_ns(pid, ns));
+ pidfd_nspid(m, pid);
seq_putc(m, '\n');
}
#endif
--
2.21.0