summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Brauner <brauner@kernel.org>2025-11-23 17:34:02 +0100
committerChristian Brauner <brauner@kernel.org>2025-11-28 12:42:36 +0100
commit99d4f12f174be8a55320b5097b5a09b7801c4e92 (patch)
tree6c0f7b3de9e77b9f28f27b6d9e1950bf6421c9ef
parent5f3ea1c201088290f66445b601a21fd89a398f88 (diff)
file: convert replace_fd() to FD_PREPARE()
Link: https://patch.msgid.link/20251123-work-fd-prepare-v4-44-b6efa1706cfd@kernel.org Signed-off-by: Christian Brauner <brauner@kernel.org>
-rw-r--r--fs/file.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/fs/file.c b/fs/file.c
index 28743b742e3c..7ea33a617896 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -1357,28 +1357,25 @@ out_unlock:
*/
int receive_fd(struct file *file, int __user *ufd, unsigned int o_flags)
{
- int new_fd;
int error;
error = security_file_receive(file);
if (error)
return error;
- new_fd = get_unused_fd_flags(o_flags);
- if (new_fd < 0)
- return new_fd;
+ FD_PREPARE(fdf, o_flags, file);
+ if (fdf.err)
+ return fdf.err;
+ get_file(file);
if (ufd) {
- error = put_user(new_fd, ufd);
- if (error) {
- put_unused_fd(new_fd);
+ error = put_user(fd_prepare_fd(fdf), ufd);
+ if (error)
return error;
- }
}
- fd_install(new_fd, get_file(file));
- __receive_sock(file);
- return new_fd;
+ __receive_sock(fd_prepare_file(fdf));
+ return fd_publish(fdf);
}
EXPORT_SYMBOL_GPL(receive_fd);