]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
io_uring/rw: ensure allocated iovec gets cleared for early failure
authorJens Axboe <axboe@kernel.dk>
Mon, 10 Nov 2025 21:30:41 +0000 (14:30 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 24 Nov 2025 09:37:46 +0000 (10:37 +0100)
commit d3c9c213c0b86ac5dd8fe2c53c24db20f1f510bc upstream.

A previous commit reused the recyling infrastructure for early cleanup,
but this is not enough for the case where our internal caches have
overflowed. If this happens, then the allocated iovec can get leaked if
the request is also aborted early.

Reinstate the previous forced free of the iovec for that situation.

Cc: stable@vger.kernel.org
Reported-by: syzbot+3c93637d7648c24e1fd0@syzkaller.appspotmail.com
Tested-by: syzbot+3c93637d7648c24e1fd0@syzkaller.appspotmail.com
Fixes: 9ac273ae3dc2 ("io_uring/rw: use io_rw_recycle() from cleanup path")
Link: https://lore.kernel.org/io-uring/69122a59.a70a0220.22f260.00fd.GAE@google.com/
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
io_uring/rw.c

index b998d945410bf1b272057fdfb6e056f603ad5885..56a0dc20a37284685c2289de6714d832693f5c7b 100644 (file)
@@ -461,7 +461,10 @@ int io_read_mshot_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
 
 void io_readv_writev_cleanup(struct io_kiocb *req)
 {
+       struct io_async_rw *rw = req->async_data;
+
        lockdep_assert_held(&req->ctx->uring_lock);
+       io_vec_free(&rw->vec);
        io_rw_recycle(req, 0);
 }