io_uring/net: clear msg_controllen on partial sendmsg retry
authorJens Axboe <axboe@kernel.dk>
Mon, 19 Jun 2023 15:35:34 +0000 (09:35 -0600)
committerJens Axboe <axboe@kernel.dk>
Wed, 21 Jun 2023 13:33:48 +0000 (07:33 -0600)
If we have cmsg attached AND we transferred partial data at least, clear
msg_controllen on retry so we don't attempt to send that again.

Cc: stable@vger.kernel.org # 5.10+
Fixes: cac9e4418f4c ("io_uring/net: save msghdr->msg_control for retries")
Reported-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/net.c

index 51b0f7f..c0924ab 100644 (file)
@@ -326,6 +326,8 @@ int io_sendmsg(struct io_kiocb *req, unsigned int issue_flags)
                if (ret == -EAGAIN && (issue_flags & IO_URING_F_NONBLOCK))
                        return io_setup_async_msg(req, kmsg, issue_flags);
                if (ret > 0 && io_net_retry(sock, flags)) {
+                       kmsg->msg.msg_controllen = 0;
+                       kmsg->msg.msg_control = NULL;
                        sr->done_io += ret;
                        req->flags |= REQ_F_PARTIAL_IO;
                        return io_setup_async_msg(req, kmsg, issue_flags);