]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
block: check bio split for unaligned bvec
authorKeith Busch <kbusch@kernel.org>
Fri, 12 Jun 2026 22:32:04 +0000 (15:32 -0700)
committerJens Axboe <axboe@kernel.dk>
Sat, 13 Jun 2026 12:35:44 +0000 (06:35 -0600)
Offsets and lengths need to be validated against the dma alignment. This
check was skipped for sufficiently a small bio with a single bvec, which
may allow an invalid request dispatched to the driver. Force the
validation for an unaligned bvec by forcing the bio split path that
handles this condition.

Fixes: 7eac33186957 ("iomap: simplify direct io validity check")
Fixes: 5ff3f74e145a ("block: simplify direct io validity check")
Reported-by: Carlos Maiolino <cem@kernel.org>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Link: https://patch.msgid.link/20260612223205.465913-1-kbusch@meta.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk.h

index 507ab34a6e90ac4318403e0c7891072a7be4683f..25af8ac5ef0f77c09b4d747827b275c32e9f2972 100644 (file)
@@ -408,6 +408,8 @@ static inline bool bio_may_need_split(struct bio *bio,
        bv = __bvec_iter_bvec(bio->bi_io_vec, bio->bi_iter);
        if (bio->bi_iter.bi_size > bv->bv_len - bio->bi_iter.bi_bvec_done)
                return true;
+       if ((bv->bv_offset | bv->bv_len) & lim->dma_alignment)
+               return true;
        return bv->bv_len + bv->bv_offset > lim->max_fast_segment_size;
 }