]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
io_uring: correct size of overflow CQE calculation
authorJens Axboe <axboe@kernel.dk>
Wed, 10 Sep 2025 15:50:30 +0000 (09:50 -0600)
committerJens Axboe <axboe@kernel.dk>
Wed, 10 Sep 2025 23:30:51 +0000 (17:30 -0600)
If a 32b CQE is required, don't double the size of the overflow struct,
just add the size of the io_uring_cqe addition that is needed. This
avoids allocating too much memory, as the io_overflow_cqe size includes
the list member required to queue them too.

Fixes: e26dca67fde1 ("io_uring: add support for IORING_SETUP_CQE_MIXED")
Reviewed-by: Caleb Sander Mateos <csander@purestorage.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/io_uring.c

index 6d62f10416eb6740f834618da9d2990e0f8a101a..1bfa124565f717c4288dc111cec4db0cec47fd10 100644 (file)
@@ -756,7 +756,7 @@ static struct io_overflow_cqe *io_alloc_ocqe(struct io_ring_ctx *ctx,
 
        if (cqe->flags & IORING_CQE_F_32 || ctx->flags & IORING_SETUP_CQE32) {
                is_cqe32 = true;
-               ocq_size <<= 1;
+               ocq_size += sizeof(struct io_uring_cqe);
        }
 
        ocqe = kzalloc(ocq_size, gfp | __GFP_ACCOUNT);