]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
null_blk: set dma alignment to logical block size
authorHans Holmberg <hans.holmberg@wdc.com>
Fri, 31 Oct 2025 09:48:26 +0000 (10:48 +0100)
committerJens Axboe <axboe@kernel.dk>
Fri, 31 Oct 2025 15:03:12 +0000 (09:03 -0600)
This driver assumes that bio vectors are memory aligned to the logical
block size, so set the queue limit to reflect that.

Unless we set up the limit based on the logical block size, we will go
out of page bounds in copy_to_nullb / copy_from_nullb.

Apparently this wasn't noticed so far because none of the tests generate
such buffers, but since commit 851c4c96db00 ("xfs: implement
XFS_IOC_DIOINFO in terms of vfs_getattr") xfstests generates unaligned
I/O, which now lead to memory corruption when using null_blk devices
with 4k block size.

Fixes: bf8d08532bc1 ("iomap: add support for dma aligned direct-io")
Fixes: b1a000d3b8ec ("block: relax direct io memory alignment")
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Hans Holmberg <hans.holmberg@wdc.com>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/null_blk/main.c

index f982027e8c85827eb3ef3834153e8ca147415800..0ee55f889cfdd3ac7810dda315e8459d050661fc 100644 (file)
@@ -1949,6 +1949,7 @@ static int null_add_dev(struct nullb_device *dev)
                .logical_block_size     = dev->blocksize,
                .physical_block_size    = dev->blocksize,
                .max_hw_sectors         = dev->max_sectors,
+               .dma_alignment          = dev->blocksize - 1,
        };
 
        struct nullb *nullb;