IORING_OP_{READ,WRITE} need mm to access user buffers, hence req->has_user check should go for them as well. Move the corresponding imports past the check. Signed-off-by: Pavel Begunkov <asml.silence@xxxxxxxxx> --- fs/io_uring.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/fs/io_uring.c b/fs/io_uring.c index edb00ae2619b..f00c2c9c67c0 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -2038,13 +2038,6 @@ static ssize_t io_import_iovec(int rw, struct io_kiocb *req, if (req->rw.kiocb.private) return -EINVAL; - if (opcode == IORING_OP_READ || opcode == IORING_OP_WRITE) { - ssize_t ret; - ret = import_single_range(rw, buf, sqe_len, *iovec, iter); - *iovec = NULL; - return ret; - } - if (req->io) { struct io_async_rw *iorw = &req->io->rw; @@ -2058,6 +2051,13 @@ static ssize_t io_import_iovec(int rw, struct io_kiocb *req, if (!req->has_user) return -EFAULT; + if (opcode == IORING_OP_READ || opcode == IORING_OP_WRITE) { + ssize_t ret; + ret = import_single_range(rw, buf, sqe_len, *iovec, iter); + *iovec = NULL; + return ret; + } + #ifdef CONFIG_COMPAT if (req->ctx->compat) return compat_import_iovec(rw, buf, sqe_len, UIO_FASTIOV, -- 2.24.0