Unverified Commit ca7707f5 authored by Christian Brauner's avatar Christian Brauner
Browse files

fork: use pidfd_prepare()



Stop open-coding get_unused_fd_flags() and anon_inode_getfile(). That's
brittle just for keeping the flags between both calls in sync. Use the
dedicated helper.

Message-Id: <20230327-pidfd-file-api-v1-2-5c0e9a3158e4@kernel.org>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 6ae930d9
Loading
Loading
Loading
Loading
+2 −11
Original line number Diff line number Diff line
@@ -2376,21 +2376,12 @@ static __latent_entropy struct task_struct *copy_process(
	 * if the fd table isn't shared).
	 */
	if (clone_flags & CLONE_PIDFD) {
		retval = get_unused_fd_flags(O_RDWR | O_CLOEXEC);
		/* Note that no task has been attached to @pid yet. */
		retval = __pidfd_prepare(pid, O_RDWR | O_CLOEXEC, &pidfile);
		if (retval < 0)
			goto bad_fork_free_pid;

		pidfd = retval;

		pidfile = anon_inode_getfile("[pidfd]", &pidfd_fops, pid,
					      O_RDWR | O_CLOEXEC);
		if (IS_ERR(pidfile)) {
			put_unused_fd(pidfd);
			retval = PTR_ERR(pidfile);
			goto bad_fork_free_pid;
		}
		get_pid(pid);	/* held by pidfile now */

		retval = put_user(pidfd, args->pidfd);
		if (retval)
			goto bad_fork_put_pidfd;