On 05/15, Oleg Nesterov wrote:
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().
Ah, sorry. Somehow I forgot you need to call pidfd_create(pid), you can't do this under rcu_read_lock().
So I was wrong, you can't avoid get/put_pid.
Oleg.