diff options
| author | Christian Brauner <brauner@kernel.org> | 2025-11-23 17:34:02 +0100 |
|---|---|---|
| committer | Christian Brauner <brauner@kernel.org> | 2025-11-28 12:42:36 +0100 |
| commit | 99d4f12f174be8a55320b5097b5a09b7801c4e92 (patch) | |
| tree | 6c0f7b3de9e77b9f28f27b6d9e1950bf6421c9ef /fs/file.c | |
| parent | 5f3ea1c201088290f66445b601a21fd89a398f88 (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>
Diffstat (limited to 'fs/file.c')
| -rw-r--r-- | fs/file.c | 19 |
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); |
