On Thu, Mar 21, 2024 at 09:16:34PM +0800, Ming Lei wrote: > For any bio with data, its start sector and size have to be aligned with > the queue's logical block size. > > This rule is obvious, but there is still user which may send unaligned > bio to block layer, and it is observed that dm-integrity can do that, > and cause double free of driver's dma meta buffer. > > So failfast unaligned bio from submit_bio_noacct() for avoiding more > troubles. I've been wanting to do that for the next merge window, as the lack of this check is kinda stunning. Note that we have open coded versions of it in __blkdev_issue_dicard and blkdev_issue_zeroout that can go away now. > +static bool bio_check_alignment(struct bio *bio, struct request_queue *q) > +{ > + unsigned int bs = q->limits.logical_block_size; > + unsigned int size = bio->bi_iter.bi_size; This should just use bdev_logical_block_size() on bio->bi_bdev.