Commit 5e223e06 authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Jens Axboe
Browse files

block: Fix bvec_set_folio() for very large folios



Similarly to 26064d3e ("block: fix adding folio to bio"), if
we attempt to add a folio that is larger than 4GB, we'll silently
truncate the offset and len.  Widen the parameters to size_t, assert
that the length is less than 4GB and set the first page that contains
the interesting data rather than the first page of the folio.

Fixes: 26db5ee1 (block: add a bvec_set_folio helper)
Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Link: https://lore.kernel.org/r/20250612144255.2850278-1-willy@infradead.org


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent f826ec79
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -57,9 +57,12 @@ static inline void bvec_set_page(struct bio_vec *bv, struct page *page,
 * @offset:	offset into the folio
 */
static inline void bvec_set_folio(struct bio_vec *bv, struct folio *folio,
		unsigned int len, unsigned int offset)
		size_t len, size_t offset)
{
	bvec_set_page(bv, &folio->page, len, offset);
	unsigned long nr = offset / PAGE_SIZE;

	WARN_ON_ONCE(len > UINT_MAX);
	bvec_set_page(bv, folio_page(folio, nr), len, offset % PAGE_SIZE);
}

/**