io_uring: fix recvmsg setup with compat buf-select

__io_compat_recvmsg_copy_hdr() with REQ_F_BUFFER_SELECT reads out iov
len but never assigns it to iov/fast_iov, leaving sr->len with garbage.
Hopefully, following io_buffer_select() truncates it to the selected
buffer size, but the value is still may be under what was specified.

Cc: <stable@vger.kernel.org> # 5.7
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Pavel Begunkov 2020-11-29 18:33:32 +00:00 committed by Jens Axboe
parent af60470347
commit 2d280bc893
1 changed files with 2 additions and 1 deletions

View File

@ -4499,7 +4499,8 @@ static int __io_compat_recvmsg_copy_hdr(struct io_kiocb *req,
return -EFAULT; return -EFAULT;
if (clen < 0) if (clen < 0)
return -EINVAL; return -EINVAL;
sr->len = iomsg->iov[0].iov_len; sr->len = clen;
iomsg->iov[0].iov_len = clen;
iomsg->iov = NULL; iomsg->iov = NULL;
} else { } else {
ret = __import_iovec(READ, (struct iovec __user *)uiov, len, ret = __import_iovec(READ, (struct iovec __user *)uiov, len,