On 05/15, Christian Brauner wrote: > > +SYSCALL_DEFINE2(pidfd_open, pid_t, pid, unsigned int, flags) > +{ > + int fd, ret; > + struct pid *p; > + struct task_struct *tsk; > + > + if (flags) > + return -EINVAL; > + > + if (pid <= 0) > + return -EINVAL; > + > + p = find_get_pid(pid); > + if (!p) > + return -ESRCH; > + > + rcu_read_lock(); > + tsk = pid_task(p, PIDTYPE_PID); You do not need find_get_pid() before rcu_lock and put_pid() at the end. You can just do find_vpid() under rcu_read_lock(). > + if (!tsk) > + ret = -ESRCH; > + else if (unlikely(!thread_group_leader(tsk))) > + ret = -EINVAL; it seems that you can do a single check tsk = pid_task(p, PIDTYPE_TGID); if (!tsk) ret = -ESRCH; this even looks more correct if we race with exec changing the leader. Oleg.