Commit 776617db authored by Tobias Holl's avatar Tobias Holl Committed by Jens Axboe
Browse files

io_uring/rsrc: check for nonconsecutive pages



Pages that are from the same folio do not necessarily need to be
consecutive. In that case, we cannot consolidate them into a single bvec
entry. Before applying the huge page optimization from commit 57bebf80
("io_uring/rsrc: optimise registered huge pages"), check that the memory
is actually consecutive.

Cc: stable@vger.kernel.org
Fixes: 57bebf80 ("io_uring/rsrc: optimise registered huge pages")
Signed-off-by: default avatarTobias Holl <tobias@tholl.xyz>
[axboe: formatting]
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 3c85cc43
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -1117,7 +1117,12 @@ static int io_sqe_buffer_register(struct io_ring_ctx *ctx, struct iovec *iov,
	if (nr_pages > 1) {
		folio = page_folio(pages[0]);
		for (i = 1; i < nr_pages; i++) {
			if (page_folio(pages[i]) != folio) {
			/*
			 * Pages must be consecutive and on the same folio for
			 * this to work
			 */
			if (page_folio(pages[i]) != folio ||
			    pages[i] != pages[i - 1] + 1) {
				folio = NULL;
				break;
			}