]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
pidfd: rely on automatic cleanup in __pidfd_prepare()
authorChristian Brauner <brauner@kernel.org>
Wed, 5 Mar 2025 10:08:12 +0000 (11:08 +0100)
committerChristian Brauner <brauner@kernel.org>
Wed, 5 Mar 2025 12:25:59 +0000 (13:25 +0100)
Rely on scope-based cleanup for the allocated file descriptor.

Link: https://lore.kernel.org/r/20250305-work-pidfs-kill_on_last_close-v3-2-c8c3d8361705@kernel.org
Acked-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
kernel/fork.c

index 735405a9c5f323b16fdac3832320c255649b6e23..6230f5256bc507cf153d44cabbb002aa1207613b 100644 (file)
@@ -2032,25 +2032,23 @@ static inline void rcu_copy_process(struct task_struct *p)
  */
 static int __pidfd_prepare(struct pid *pid, unsigned int flags, struct file **ret)
 {
-       int pidfd;
        struct file *pidfd_file;
 
-       pidfd = get_unused_fd_flags(O_CLOEXEC);
+       CLASS(get_unused_fd, pidfd)(O_CLOEXEC);
        if (pidfd < 0)
                return pidfd;
 
        pidfd_file = pidfs_alloc_file(pid, flags | O_RDWR);
-       if (IS_ERR(pidfd_file)) {
-               put_unused_fd(pidfd);
+       if (IS_ERR(pidfd_file))
                return PTR_ERR(pidfd_file);
-       }
+
        /*
         * anon_inode_getfile() ignores everything outside of the
         * O_ACCMODE | O_NONBLOCK mask, set PIDFD_THREAD manually.
         */
        pidfd_file->f_flags |= (flags & PIDFD_THREAD);
        *ret = pidfd_file;
-       return pidfd;
+       return take_fd(pidfd);
 }
 
 /**