| From d876836204897b6d7d911f942084f69a1e9d5c4d Mon Sep 17 00:00:00 2001 |
| From: Jens Axboe <axboe@kernel.dk> |
| Date: Thu, 27 Feb 2020 14:17:49 -0700 |
| Subject: io_uring: fix 32-bit compatability with sendmsg/recvmsg |
| |
| From: Jens Axboe <axboe@kernel.dk> |
| |
| commit d876836204897b6d7d911f942084f69a1e9d5c4d upstream. |
| |
| We must set MSG_CMSG_COMPAT if we're in compatability mode, otherwise |
| the iovec import for these commands will not do the right thing and fail |
| the command with -EINVAL. |
| |
| Found by running the test suite compiled as 32-bit. |
| |
| Cc: stable@vger.kernel.org |
| Fixes: aa1fa28fc73e ("io_uring: add support for recvmsg()") |
| Fixes: 0fa03c624d8f ("io_uring: add support for sendmsg()") |
| Signed-off-by: Jens Axboe <axboe@kernel.dk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/io_uring.c | 10 ++++++++++ |
| 1 file changed, 10 insertions(+) |
| |
| --- a/fs/io_uring.c |
| +++ b/fs/io_uring.c |
| @@ -2166,6 +2166,11 @@ static int io_sendmsg_prep(struct io_kio |
| sr->msg_flags = READ_ONCE(sqe->msg_flags); |
| sr->msg = u64_to_user_ptr(READ_ONCE(sqe->addr)); |
| |
| +#ifdef CONFIG_COMPAT |
| + if (req->ctx->compat) |
| + sr->msg_flags |= MSG_CMSG_COMPAT; |
| +#endif |
| + |
| if (!io) |
| return 0; |
| |
| @@ -2258,6 +2263,11 @@ static int io_recvmsg_prep(struct io_kio |
| sr->msg_flags = READ_ONCE(sqe->msg_flags); |
| sr->msg = u64_to_user_ptr(READ_ONCE(sqe->addr)); |
| |
| +#ifdef CONFIG_COMPAT |
| + if (req->ctx->compat) |
| + sr->msg_flags |= MSG_CMSG_COMPAT; |
| +#endif |
| + |
| if (!io) |
| return 0; |
| |