mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
block: Fix bvec_set_folio() for very large folios
Similarly to26064d3e2b
("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:26db5ee158
(block: add a bvec_set_folio helper) Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Link: https://lore.kernel.org/r/20250612144255.2850278-1-willy@infradead.org Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
f826ec7966
commit
5e223e06ee
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user