1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/kernel.h>
3 #include <linux/errno.h>
4 #include <linux/file.h>
5 #include <linux/slab.h>
7 #include <linux/compat.h>
8 #include <net/compat.h>
9 #include <linux/io_uring.h>
11 #include <uapi/linux/io_uring.h>
13 #include "io_uring_types.h"
18 #if defined(CONFIG_NET)
26 struct sockaddr __user *addr;
45 struct sockaddr __user *addr;
52 struct compat_msghdr __user *umsg_compat;
53 struct user_msghdr __user *umsg;
62 #define IO_APOLL_MULTI_POLLED (REQ_F_APOLL_MULTISHOT | REQ_F_POLLED)
64 int io_shutdown_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
66 struct io_shutdown *shutdown = io_kiocb_to_cmd(req);
68 if (unlikely(sqe->off || sqe->addr || sqe->rw_flags ||
69 sqe->buf_index || sqe->splice_fd_in))
72 shutdown->how = READ_ONCE(sqe->len);
76 int io_shutdown(struct io_kiocb *req, unsigned int issue_flags)
78 struct io_shutdown *shutdown = io_kiocb_to_cmd(req);
82 if (issue_flags & IO_URING_F_NONBLOCK)
85 sock = sock_from_file(req->file);
89 ret = __sys_shutdown_sock(sock, shutdown->how);
90 io_req_set_res(req, ret, 0);
94 static bool io_net_retry(struct socket *sock, int flags)
96 if (!(flags & MSG_WAITALL))
98 return sock->type == SOCK_STREAM || sock->type == SOCK_SEQPACKET;
101 static int io_setup_async_msg(struct io_kiocb *req,
102 struct io_async_msghdr *kmsg)
104 struct io_async_msghdr *async_msg = req->async_data;
108 if (io_alloc_async_data(req)) {
109 kfree(kmsg->free_iov);
112 async_msg = req->async_data;
113 req->flags |= REQ_F_NEED_CLEANUP;
114 memcpy(async_msg, kmsg, sizeof(*kmsg));
115 async_msg->msg.msg_name = &async_msg->addr;
116 /* if were using fast_iov, set it to the new one */
117 if (!async_msg->free_iov)
118 async_msg->msg.msg_iter.iov = async_msg->fast_iov;
123 static int io_sendmsg_copy_hdr(struct io_kiocb *req,
124 struct io_async_msghdr *iomsg)
126 struct io_sr_msg *sr = io_kiocb_to_cmd(req);
128 iomsg->msg.msg_name = &iomsg->addr;
129 iomsg->free_iov = iomsg->fast_iov;
130 return sendmsg_copy_msghdr(&iomsg->msg, sr->umsg, sr->msg_flags,
134 int io_sendmsg_prep_async(struct io_kiocb *req)
138 ret = io_sendmsg_copy_hdr(req, req->async_data);
140 req->flags |= REQ_F_NEED_CLEANUP;
144 void io_sendmsg_recvmsg_cleanup(struct io_kiocb *req)
146 struct io_async_msghdr *io = req->async_data;
151 int io_sendmsg_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
153 struct io_sr_msg *sr = io_kiocb_to_cmd(req);
155 if (unlikely(sqe->file_index || sqe->addr2))
158 sr->umsg = u64_to_user_ptr(READ_ONCE(sqe->addr));
159 sr->len = READ_ONCE(sqe->len);
160 sr->flags = READ_ONCE(sqe->ioprio);
161 if (sr->flags & ~IORING_RECVSEND_POLL_FIRST)
163 sr->msg_flags = READ_ONCE(sqe->msg_flags) | MSG_NOSIGNAL;
164 if (sr->msg_flags & MSG_DONTWAIT)
165 req->flags |= REQ_F_NOWAIT;
168 if (req->ctx->compat)
169 sr->msg_flags |= MSG_CMSG_COMPAT;
175 int io_sendmsg(struct io_kiocb *req, unsigned int issue_flags)
177 struct io_sr_msg *sr = io_kiocb_to_cmd(req);
178 struct io_async_msghdr iomsg, *kmsg;
184 sock = sock_from_file(req->file);
188 if (req_has_async_data(req)) {
189 kmsg = req->async_data;
191 ret = io_sendmsg_copy_hdr(req, &iomsg);
197 if (!(req->flags & REQ_F_POLLED) &&
198 (sr->flags & IORING_RECVSEND_POLL_FIRST))
199 return io_setup_async_msg(req, kmsg);
201 flags = sr->msg_flags;
202 if (issue_flags & IO_URING_F_NONBLOCK)
203 flags |= MSG_DONTWAIT;
204 if (flags & MSG_WAITALL)
205 min_ret = iov_iter_count(&kmsg->msg.msg_iter);
207 ret = __sys_sendmsg_sock(sock, &kmsg->msg, flags);
210 if (ret == -EAGAIN && (issue_flags & IO_URING_F_NONBLOCK))
211 return io_setup_async_msg(req, kmsg);
212 if (ret == -ERESTARTSYS)
214 if (ret > 0 && io_net_retry(sock, flags)) {
216 req->flags |= REQ_F_PARTIAL_IO;
217 return io_setup_async_msg(req, kmsg);
221 /* fast path, check for non-NULL to avoid function call */
223 kfree(kmsg->free_iov);
224 req->flags &= ~REQ_F_NEED_CLEANUP;
227 else if (sr->done_io)
229 io_req_set_res(req, ret, 0);
233 int io_send(struct io_kiocb *req, unsigned int issue_flags)
235 struct io_sr_msg *sr = io_kiocb_to_cmd(req);
243 if (!(req->flags & REQ_F_POLLED) &&
244 (sr->flags & IORING_RECVSEND_POLL_FIRST))
247 sock = sock_from_file(req->file);
251 ret = import_single_range(WRITE, sr->buf, sr->len, &iov, &msg.msg_iter);
256 msg.msg_control = NULL;
257 msg.msg_controllen = 0;
260 flags = sr->msg_flags;
261 if (issue_flags & IO_URING_F_NONBLOCK)
262 flags |= MSG_DONTWAIT;
263 if (flags & MSG_WAITALL)
264 min_ret = iov_iter_count(&msg.msg_iter);
266 msg.msg_flags = flags;
267 ret = sock_sendmsg(sock, &msg);
269 if (ret == -EAGAIN && (issue_flags & IO_URING_F_NONBLOCK))
271 if (ret == -ERESTARTSYS)
273 if (ret > 0 && io_net_retry(sock, flags)) {
277 req->flags |= REQ_F_PARTIAL_IO;
284 else if (sr->done_io)
286 io_req_set_res(req, ret, 0);
290 static int __io_recvmsg_copy_hdr(struct io_kiocb *req,
291 struct io_async_msghdr *iomsg)
293 struct io_sr_msg *sr = io_kiocb_to_cmd(req);
294 struct iovec __user *uiov;
298 ret = __copy_msghdr_from_user(&iomsg->msg, sr->umsg,
299 &iomsg->uaddr, &uiov, &iov_len);
303 if (req->flags & REQ_F_BUFFER_SELECT) {
306 if (copy_from_user(iomsg->fast_iov, uiov, sizeof(*uiov)))
308 sr->len = iomsg->fast_iov[0].iov_len;
309 iomsg->free_iov = NULL;
311 iomsg->free_iov = iomsg->fast_iov;
312 ret = __import_iovec(READ, uiov, iov_len, UIO_FASTIOV,
313 &iomsg->free_iov, &iomsg->msg.msg_iter,
323 static int __io_compat_recvmsg_copy_hdr(struct io_kiocb *req,
324 struct io_async_msghdr *iomsg)
326 struct io_sr_msg *sr = io_kiocb_to_cmd(req);
327 struct compat_iovec __user *uiov;
332 ret = __get_compat_msghdr(&iomsg->msg, sr->umsg_compat, &iomsg->uaddr,
337 uiov = compat_ptr(ptr);
338 if (req->flags & REQ_F_BUFFER_SELECT) {
343 if (!access_ok(uiov, sizeof(*uiov)))
345 if (__get_user(clen, &uiov->iov_len))
350 iomsg->free_iov = NULL;
352 iomsg->free_iov = iomsg->fast_iov;
353 ret = __import_iovec(READ, (struct iovec __user *)uiov, len,
354 UIO_FASTIOV, &iomsg->free_iov,
355 &iomsg->msg.msg_iter, true);
364 static int io_recvmsg_copy_hdr(struct io_kiocb *req,
365 struct io_async_msghdr *iomsg)
367 iomsg->msg.msg_name = &iomsg->addr;
370 if (req->ctx->compat)
371 return __io_compat_recvmsg_copy_hdr(req, iomsg);
374 return __io_recvmsg_copy_hdr(req, iomsg);
377 int io_recvmsg_prep_async(struct io_kiocb *req)
381 ret = io_recvmsg_copy_hdr(req, req->async_data);
383 req->flags |= REQ_F_NEED_CLEANUP;
387 int io_recvmsg_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
389 struct io_sr_msg *sr = io_kiocb_to_cmd(req);
391 if (unlikely(sqe->file_index || sqe->addr2))
394 sr->umsg = u64_to_user_ptr(READ_ONCE(sqe->addr));
395 sr->len = READ_ONCE(sqe->len);
396 sr->flags = READ_ONCE(sqe->ioprio);
397 if (sr->flags & ~IORING_RECVSEND_POLL_FIRST)
399 sr->msg_flags = READ_ONCE(sqe->msg_flags) | MSG_NOSIGNAL;
400 if (sr->msg_flags & MSG_DONTWAIT)
401 req->flags |= REQ_F_NOWAIT;
402 if (sr->msg_flags & MSG_ERRQUEUE)
403 req->flags |= REQ_F_CLEAR_POLLIN;
406 if (req->ctx->compat)
407 sr->msg_flags |= MSG_CMSG_COMPAT;
413 int io_recvmsg(struct io_kiocb *req, unsigned int issue_flags)
415 struct io_sr_msg *sr = io_kiocb_to_cmd(req);
416 struct io_async_msghdr iomsg, *kmsg;
420 int ret, min_ret = 0;
421 bool force_nonblock = issue_flags & IO_URING_F_NONBLOCK;
423 sock = sock_from_file(req->file);
427 if (req_has_async_data(req)) {
428 kmsg = req->async_data;
430 ret = io_recvmsg_copy_hdr(req, &iomsg);
436 if (!(req->flags & REQ_F_POLLED) &&
437 (sr->flags & IORING_RECVSEND_POLL_FIRST))
438 return io_setup_async_msg(req, kmsg);
440 if (io_do_buffer_select(req)) {
443 buf = io_buffer_select(req, &sr->len, issue_flags);
446 kmsg->fast_iov[0].iov_base = buf;
447 kmsg->fast_iov[0].iov_len = sr->len;
448 iov_iter_init(&kmsg->msg.msg_iter, READ, kmsg->fast_iov, 1,
452 flags = sr->msg_flags;
454 flags |= MSG_DONTWAIT;
455 if (flags & MSG_WAITALL)
456 min_ret = iov_iter_count(&kmsg->msg.msg_iter);
458 kmsg->msg.msg_get_inq = 1;
459 ret = __sys_recvmsg_sock(sock, &kmsg->msg, sr->umsg, kmsg->uaddr, flags);
461 if (ret == -EAGAIN && force_nonblock)
462 return io_setup_async_msg(req, kmsg);
463 if (ret == -ERESTARTSYS)
465 if (ret > 0 && io_net_retry(sock, flags)) {
467 req->flags |= REQ_F_PARTIAL_IO;
468 return io_setup_async_msg(req, kmsg);
471 } else if ((flags & MSG_WAITALL) && (kmsg->msg.msg_flags & (MSG_TRUNC | MSG_CTRUNC))) {
475 /* fast path, check for non-NULL to avoid function call */
477 kfree(kmsg->free_iov);
478 req->flags &= ~REQ_F_NEED_CLEANUP;
481 else if (sr->done_io)
483 cflags = io_put_kbuf(req, issue_flags);
484 if (kmsg->msg.msg_inq)
485 cflags |= IORING_CQE_F_SOCK_NONEMPTY;
486 io_req_set_res(req, ret, cflags);
490 int io_recv(struct io_kiocb *req, unsigned int issue_flags)
492 struct io_sr_msg *sr = io_kiocb_to_cmd(req);
498 int ret, min_ret = 0;
499 bool force_nonblock = issue_flags & IO_URING_F_NONBLOCK;
501 if (!(req->flags & REQ_F_POLLED) &&
502 (sr->flags & IORING_RECVSEND_POLL_FIRST))
505 sock = sock_from_file(req->file);
509 if (io_do_buffer_select(req)) {
512 buf = io_buffer_select(req, &sr->len, issue_flags);
518 ret = import_single_range(READ, sr->buf, sr->len, &iov, &msg.msg_iter);
524 msg.msg_control = NULL;
527 msg.msg_controllen = 0;
530 flags = sr->msg_flags;
532 flags |= MSG_DONTWAIT;
533 if (flags & MSG_WAITALL)
534 min_ret = iov_iter_count(&msg.msg_iter);
536 ret = sock_recvmsg(sock, &msg, flags);
538 if (ret == -EAGAIN && force_nonblock)
540 if (ret == -ERESTARTSYS)
542 if (ret > 0 && io_net_retry(sock, flags)) {
546 req->flags |= REQ_F_PARTIAL_IO;
550 } else if ((flags & MSG_WAITALL) && (msg.msg_flags & (MSG_TRUNC | MSG_CTRUNC))) {
557 else if (sr->done_io)
559 cflags = io_put_kbuf(req, issue_flags);
561 cflags |= IORING_CQE_F_SOCK_NONEMPTY;
562 io_req_set_res(req, ret, cflags);
566 int io_accept_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
568 struct io_accept *accept = io_kiocb_to_cmd(req);
571 if (sqe->len || sqe->buf_index)
574 accept->addr = u64_to_user_ptr(READ_ONCE(sqe->addr));
575 accept->addr_len = u64_to_user_ptr(READ_ONCE(sqe->addr2));
576 accept->flags = READ_ONCE(sqe->accept_flags);
577 accept->nofile = rlimit(RLIMIT_NOFILE);
578 flags = READ_ONCE(sqe->ioprio);
579 if (flags & ~IORING_ACCEPT_MULTISHOT)
582 accept->file_slot = READ_ONCE(sqe->file_index);
583 if (accept->file_slot) {
584 if (accept->flags & SOCK_CLOEXEC)
586 if (flags & IORING_ACCEPT_MULTISHOT &&
587 accept->file_slot != IORING_FILE_INDEX_ALLOC)
590 if (accept->flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
592 if (SOCK_NONBLOCK != O_NONBLOCK && (accept->flags & SOCK_NONBLOCK))
593 accept->flags = (accept->flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
594 if (flags & IORING_ACCEPT_MULTISHOT)
595 req->flags |= REQ_F_APOLL_MULTISHOT;
599 int io_accept(struct io_kiocb *req, unsigned int issue_flags)
601 struct io_ring_ctx *ctx = req->ctx;
602 struct io_accept *accept = io_kiocb_to_cmd(req);
603 bool force_nonblock = issue_flags & IO_URING_F_NONBLOCK;
604 unsigned int file_flags = force_nonblock ? O_NONBLOCK : 0;
605 bool fixed = !!accept->file_slot;
611 fd = __get_unused_fd_flags(accept->flags, accept->nofile);
612 if (unlikely(fd < 0))
615 file = do_accept(req->file, file_flags, accept->addr, accept->addr_len,
621 if (ret == -EAGAIN && force_nonblock) {
623 * if it's multishot and polled, we don't need to
624 * return EAGAIN to arm the poll infra since it
625 * has already been done
627 if ((req->flags & IO_APOLL_MULTI_POLLED) ==
628 IO_APOLL_MULTI_POLLED)
629 ret = IOU_ISSUE_SKIP_COMPLETE;
632 if (ret == -ERESTARTSYS)
636 fd_install(fd, file);
639 ret = io_fixed_fd_install(req, issue_flags, file,
643 if (!(req->flags & REQ_F_APOLL_MULTISHOT)) {
644 io_req_set_res(req, ret, 0);
650 if (io_post_aux_cqe(ctx, req->cqe.user_data, ret, IORING_CQE_F_MORE))
655 int io_socket_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
657 struct io_socket *sock = io_kiocb_to_cmd(req);
659 if (sqe->addr || sqe->rw_flags || sqe->buf_index)
662 sock->domain = READ_ONCE(sqe->fd);
663 sock->type = READ_ONCE(sqe->off);
664 sock->protocol = READ_ONCE(sqe->len);
665 sock->file_slot = READ_ONCE(sqe->file_index);
666 sock->nofile = rlimit(RLIMIT_NOFILE);
668 sock->flags = sock->type & ~SOCK_TYPE_MASK;
669 if (sock->file_slot && (sock->flags & SOCK_CLOEXEC))
671 if (sock->flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
676 int io_socket(struct io_kiocb *req, unsigned int issue_flags)
678 struct io_socket *sock = io_kiocb_to_cmd(req);
679 bool fixed = !!sock->file_slot;
684 fd = __get_unused_fd_flags(sock->flags, sock->nofile);
685 if (unlikely(fd < 0))
688 file = __sys_socket_file(sock->domain, sock->type, sock->protocol);
693 if (ret == -EAGAIN && (issue_flags & IO_URING_F_NONBLOCK))
695 if (ret == -ERESTARTSYS)
699 fd_install(fd, file);
702 ret = io_fixed_fd_install(req, issue_flags, file,
705 io_req_set_res(req, ret, 0);
709 int io_connect_prep_async(struct io_kiocb *req)
711 struct io_async_connect *io = req->async_data;
712 struct io_connect *conn = io_kiocb_to_cmd(req);
714 return move_addr_to_kernel(conn->addr, conn->addr_len, &io->address);
717 int io_connect_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
719 struct io_connect *conn = io_kiocb_to_cmd(req);
721 if (sqe->len || sqe->buf_index || sqe->rw_flags || sqe->splice_fd_in)
724 conn->addr = u64_to_user_ptr(READ_ONCE(sqe->addr));
725 conn->addr_len = READ_ONCE(sqe->addr2);
729 int io_connect(struct io_kiocb *req, unsigned int issue_flags)
731 struct io_connect *connect = io_kiocb_to_cmd(req);
732 struct io_async_connect __io, *io;
735 bool force_nonblock = issue_flags & IO_URING_F_NONBLOCK;
737 if (req_has_async_data(req)) {
738 io = req->async_data;
740 ret = move_addr_to_kernel(connect->addr,
748 file_flags = force_nonblock ? O_NONBLOCK : 0;
750 ret = __sys_connect_file(req->file, &io->address,
751 connect->addr_len, file_flags);
752 if ((ret == -EAGAIN || ret == -EINPROGRESS) && force_nonblock) {
753 if (req_has_async_data(req))
755 if (io_alloc_async_data(req)) {
759 memcpy(req->async_data, &__io, sizeof(__io));
762 if (ret == -ERESTARTSYS)
767 io_req_set_res(req, ret, 0);