On 09/02, Christian Brauner wrote: > > -static int pidfd_create(struct pid *pid) > +static int pidfd_create(struct pid *pid, unsigned int flags) > { > int fd; > > fd = anon_inode_getfd("[pidfd]", &pidfd_fops, get_pid(pid), > - O_RDWR | O_CLOEXEC); > + flags | O_RDWR | O_CLOEXEC); > if (fd < 0) > put_pid(pid); > > @@ -565,7 +567,7 @@ SYSCALL_DEFINE2(pidfd_open, pid_t, pid, unsigned int, flags) > int fd; > struct pid *p; > > - if (flags) > + if (flags & ~PIDFD_NONBLOCK) > return -EINVAL; > > if (pid <= 0) > @@ -576,7 +578,7 @@ SYSCALL_DEFINE2(pidfd_open, pid_t, pid, unsigned int, flags) > return -ESRCH; > > if (pid_has_task(p, PIDTYPE_TGID)) > - fd = pidfd_create(p); > + fd = pidfd_create(p, flags); > else > fd = -EINVAL; > Reviewed-by: Oleg Nesterov <oleg@xxxxxxxxxx>