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);
if (fd < 0) put_pid(pid);flags | O_RDWR | O_CLOEXEC);
@@ -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);
else fd = -EINVAL;fd = pidfd_create(p, flags);
Reviewed-by: Oleg Nesterov oleg@redhat.com