mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
net/handshake: convert handshake_nl_accept_doit() to FD_PREPARE()
Link: https://patch.msgid.link/20251123-work-fd-prepare-v4-27-b6efa1706cfd@kernel.org Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
@@ -93,7 +93,7 @@ int handshake_nl_accept_doit(struct sk_buff *skb, struct genl_info *info)
|
||||
struct handshake_net *hn = handshake_pernet(net);
|
||||
struct handshake_req *req = NULL;
|
||||
struct socket *sock;
|
||||
int class, fd, err;
|
||||
int class, err;
|
||||
|
||||
err = -EOPNOTSUPP;
|
||||
if (!hn)
|
||||
@@ -106,27 +106,25 @@ int handshake_nl_accept_doit(struct sk_buff *skb, struct genl_info *info)
|
||||
|
||||
err = -EAGAIN;
|
||||
req = handshake_req_next(hn, class);
|
||||
if (!req)
|
||||
goto out_status;
|
||||
if (req) {
|
||||
sock = req->hr_sk->sk_socket;
|
||||
|
||||
sock = req->hr_sk->sk_socket;
|
||||
fd = get_unused_fd_flags(O_CLOEXEC);
|
||||
if (fd < 0) {
|
||||
err = fd;
|
||||
goto out_complete;
|
||||
FD_PREPARE(fdf, O_CLOEXEC, sock->file);
|
||||
if (fdf.err) {
|
||||
err = fdf.err;
|
||||
goto out_complete;
|
||||
}
|
||||
|
||||
get_file(sock->file); /* FD_PREPARE() consumes a reference. */
|
||||
err = req->hr_proto->hp_accept(req, info, fd_prepare_fd(fdf));
|
||||
if (err)
|
||||
goto out_complete; /* Automatic cleanup handles fput */
|
||||
|
||||
trace_handshake_cmd_accept(net, req, req->hr_sk, fd_prepare_fd(fdf));
|
||||
fd_publish(fdf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
err = req->hr_proto->hp_accept(req, info, fd);
|
||||
if (err) {
|
||||
put_unused_fd(fd);
|
||||
goto out_complete;
|
||||
}
|
||||
|
||||
fd_install(fd, get_file(sock->file));
|
||||
|
||||
trace_handshake_cmd_accept(net, req, req->hr_sk, fd);
|
||||
return 0;
|
||||
|
||||
out_complete:
|
||||
handshake_complete(req, -EIO, NULL);
|
||||
out_status:
|
||||
|
||||
Reference in New Issue
Block a user