pid: use pid_has_task() in pidfd_open()
authorChristian Brauner <christian.brauner@ubuntu.com>
Thu, 17 Oct 2019 10:18:32 +0000 (12:18 +0200)
committerChristian Brauner <christian.brauner@ubuntu.com>
Thu, 17 Oct 2019 13:37:00 +0000 (15:37 +0200)
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
kernel/pid.c

index 124d40b..7b5f6c9 100644 (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;
 }