]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
io_uring: fail NOP if non-zero op flags is passed in
authorMing Lei <ming.lei@redhat.com>
Fri, 10 May 2024 03:50:27 +0000 (11:50 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 16 Jun 2024 11:32:30 +0000 (13:32 +0200)
commit 3d8f874bd620ce03f75a5512847586828ab86544 upstream.

The NOP op flags should have been checked from beginning like any other
opcode, otherwise NOP may not be extended with the op flags.

Given both liburing and Rust io-uring crate always zeros SQE op flags, just
ignore users which play raw NOP uring interface without zeroing SQE, because
NOP is just for test purpose. Then we can save one NOP2 opcode.

Suggested-by: Jens Axboe <axboe@kernel.dk>
Fixes: 2b188cc1bb85 ("Add io_uring IO interface")
Cc: stable@vger.kernel.org
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20240510035031.78874-2-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
io_uring/io_uring.c

index 93f9ecedc59f62d1bc03d387d9779dc3be71166f..47bc8fe2b94522c414bfe49d3009e816878471a9 100644 (file)
@@ -6474,6 +6474,8 @@ static int io_req_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
 {
        switch (req->opcode) {
        case IORING_OP_NOP:
+               if (READ_ONCE(sqe->rw_flags))
+                       return -EINVAL;
                return 0;
        case IORING_OP_READV:
        case IORING_OP_READ_FIXED: