mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Christian Brauner <christian@brauner.io>
To: Jann Horn <jannh@google.com>
Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>,
	Andy Lutomirski <luto@kernel.org>,
	David Howells <dhowells@redhat.com>,
	"Serge E. Hallyn" <serge@hallyn.com>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	Linux API <linux-api@vger.kernel.org>,
	kernel list <linux-kernel@vger.kernel.org>,
	Arnd Bergmann <arnd@arndb.de>, Kees Cook <keescook@chromium.org>,
	Alexey Dobriyan <adobriyan@gmail.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Michael Kerrisk-manpages <mtk.manpages@gmail.com>,
	Jonathan Kowalski <bl0pbl33p@gmail.com>,
	"Dmitry V. Levin" <ldv@altlinux.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Oleg Nesterov <oleg@redhat.com>,
	Nagarathnam Muthusamy <nagarathnam.muthusamy@oracle.com>,
	Aleksa Sarai <cyphar@cyphar.com>,
	Al Viro <viro@zeniv.linux.org.uk>,
	"Joel Fernandes (Google)" <joel@joelfernandes.org>,
	Daniel Colascione <dancol@google.com>
Subject: Re: [PATCH 2/4] pid: add pidfd_open()
Date: Wed, 27 Mar 2019 22:02:35 +0100	[thread overview]
Message-ID: <20190327210234.po2t3m3575tqdcac@brauner.io> (raw)
In-Reply-To: <CAG48ez2QgRQKYeNDpacLGCOuNKVM1g=1PK3KzzO2Uoyn2cKXaQ@mail.gmail.com>

On Wed, Mar 27, 2019 at 06:07:54PM +0100, Jann Horn wrote:
> On Wed, Mar 27, 2019 at 5:22 PM Christian Brauner <christian@brauner.io> wrote:
> > pidfd_open() allows to retrieve pidfds for processes and removes the
> > dependency of pidfd on procfs. Multiple people have expressed a desire to
> > do this even when pidfd_send_signal() was merged. It is even recorded in
> [...]
> > IF PROCFD_TO_PIDFD is passed as a flag together with a file descriptor to a
> > /proc mount in a given pid namespace and a pidfd pidfd_open() will return a
> > file descriptor to the corresponding /proc/<pid> directory in procfs
> > mounts' pid namespace. pidfd_open() is very careful to verify that the pid
> 
> nit: s/mounts'/mount's/

Thanks.

> 
> > hasn't been recycled in between.
> > IF PIDFD_TO_PROCFD is passed as a flag together with a file descriptor
> > referencing a /proc/<pid> directory a pidfd referencing the struct pid
> > stashed in /proc/<pid> of the process will be returned.
> 
> nit: s/of the process //?

Yes.

> 
> > The pidfd_open() syscalls in that manner resembles openat() as it uses a
> 
> nit: s/syscalls/syscall/

Thanks.

> 
> [...]
> > diff --git a/kernel/pid.c b/kernel/pid.c
> > index 20881598bdfa..c9e24e726aba 100644
> > --- a/kernel/pid.c
> > +++ b/kernel/pid.c
> [...]
> > +static struct file *pidfd_open_proc_pid(const struct file *procf, pid_t pid,
> > +                                       const struct pid *pidfd_pid)
> > +{
> > +       char name[11]; /* int to strlen + \0 */
> 
> nit: The comment is a bit off; an unconstrained int needs 1+10+1
> bytes, I think? minus sign, 10 digits, nullbyte? But of course that
> can't actually happen here.

Yes, the comment is misleading.

> 
> > +       struct file *file;
> > +       struct pid *proc_pid;
> > +
> > +       snprintf(name, sizeof(name), "%d", pid);
> > +       file = file_open_root(procf->f_path.dentry, procf->f_path.mnt, name,
> > +                             O_DIRECTORY | O_NOFOLLOW, 0);
> 
> Maybe explicitly write the implied O_RDONLY (which is 0) here for clarity?

Yes.

> 
> [...]
> > +static int pidfd_to_procfd(pid_t pid, int procfd, int pidfd)
> > +{
> > +       long fd;
> > +       pid_t ns_pid;
> > +       struct fd fdproc, fdpid;
> > +       struct file *file = NULL;
> > +       struct pid *pidfd_pid = NULL;
> > +       struct pid_namespace *proc_pid_ns = NULL;
> > +
> > +       fdproc = fdget(procfd);
> > +       if (!fdproc.file)
> > +               return -EBADF;
> > +
> > +       fdpid = fdget(pidfd);
> > +       if (!fdpid.file) {
> > +               fdput(fdpid);
> 
> Typo: s/fdput(fdpid)/fdput(fdproc)/

Good catch!

> 
> [...]
> > +SYSCALL_DEFINE4(pidfd_open, pid_t, pid, int, procfd, int, pidfd, unsigned int,
> > +               flags)
> [...]
> > +       if (!flags) {
> [...]
> > +               rcu_read_lock();
> > +               pidfd_pid = get_pid(find_pid_ns(pid, task_active_pid_ns(current)));
> > +               rcu_read_unlock();
> 
> The previous three lines are equivalent to `pidfd_pid = find_get_pid(pid)`.

Perfect, will replace.

> 
> > +               fd = pidfd_create_fd(pidfd_pid, O_CLOEXEC);
> 
> Nit: You could hardcode O_CLOEXEC in pidfd_create_fd() and get rid of
> the second function argument if you want to.

Hm, let me rename this to pidfd_create_cloexec(pidfd_pid) then.

> 
> > +               put_pid(pidfd_pid);
> > +       } else if (flags & PIDFD_TO_PROCFD) {
> [...]
> > +               fd = pidfd_to_procfd(pid, procfd, pidfd);
> 
> The `pid` argument of pidfd_to_procfd() looks unused, maybe it makes
> sense to get rid of that?

Yes.

  reply	other threads:[~2019-03-27 21:02 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-27 16:21 [PATCH 0/4] pidfd_open() Christian Brauner
2019-03-27 16:21 ` [PATCH 1/4] Make anon_inodes unconditional Christian Brauner
2019-03-27 16:21 ` [PATCH 2/4] pid: add pidfd_open() Christian Brauner
2019-03-27 17:07   ` Jann Horn
2019-03-27 21:02     ` Christian Brauner [this message]
2019-03-27 17:21   ` Yann Droneaud
2019-03-27 20:59     ` Christian Brauner
2019-03-27 19:38   ` Jonathan Kowalski
2019-03-27 20:17     ` Jonathan Kowalski
2019-03-27 21:34     ` Christian Brauner
2019-03-27 22:12       ` Jonathan Kowalski
2019-03-27 22:25         ` Christian Brauner
2019-03-28  0:42           ` Jonathan Kowalski
2019-03-28 10:38             ` Christian Brauner
2019-03-28 16:59               ` Joel Fernandes
2019-03-28 17:07                 ` Christian Brauner
2019-03-30  5:35               ` Daniel Colascione
2019-03-30  6:25                 ` Jonathan Kowalski
2019-03-30  7:39                   ` Daniel Colascione
2019-03-30 14:30                     ` Jonathan Kowalski
2019-03-30 16:08                       ` Daniel Colascione
2019-03-27 16:21 ` [PATCH 3/4] signal: support pidfd_open() with pidfd_send_signal() Christian Brauner
2019-03-27 16:21 ` [PATCH 4/4] tests: add pidfd_open() tests Christian Brauner
2019-03-27 19:36   ` Kees Cook
2019-03-27 20:55     ` Christian Brauner

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=20190327210234.po2t3m3575tqdcac@brauner.io \
    --to=christian@brauner.io \
    --cc=adobriyan@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=bl0pbl33p@gmail.com \
    --cc=cyphar@cyphar.com \
    --cc=dancol@google.com \
    --cc=dhowells@redhat.com \
    --cc=ebiederm@xmission.com \
    --cc=jannh@google.com \
    --cc=joel@joelfernandes.org \
    --cc=keescook@chromium.org \
    --cc=khlebnikov@yandex-team.ru \
    --cc=ldv@altlinux.org \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=mtk.manpages@gmail.com \
    --cc=nagarathnam.muthusamy@oracle.com \
    --cc=oleg@redhat.com \
    --cc=serge@hallyn.com \
    --cc=tglx@linutronix.de \
    --cc=viro@zeniv.linux.org.uk \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®