pid: use pid_has_task() in pidfd_open()

Use the new pid_has_task() helper in pidfd_open(). This simplifies the
code and avoids taking rcu_read_{lock,unlock}() and leads to overall
nicer code.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
Reviewed-by: Oleg Nesterov <oleg@redhat.com>
Link: https://lore.kernel.org/r/20191017101832.5985-5-christian.brauner@ubuntu.com
This commit is contained in:
Christian Brauner 2019-10-17 12:18:32 +02:00
parent 1722c14a20
commit 1e1d0f0b1a
No known key found for this signature in database
GPG Key ID: 91C61BC06578DCA2

View File

@ -497,7 +497,7 @@ static int pidfd_create(struct pid *pid)
*/
SYSCALL_DEFINE2(pidfd_open, pid_t, pid, unsigned int, flags)
{
int fd, ret;
int fd;
struct pid *p;
if (flags)
@ -510,13 +510,11 @@ SYSCALL_DEFINE2(pidfd_open, pid_t, pid, unsigned int, flags)
if (!p)
return -ESRCH;
ret = 0;
rcu_read_lock();
if (!pid_task(p, PIDTYPE_TGID))
ret = -EINVAL;
rcu_read_unlock();
if (pid_has_task(p, PIDTYPE_TGID))
fd = pidfd_create(p);
else
fd = -EINVAL;
fd = ret ?: pidfd_create(p);
put_pid(p);
return fd;
}