]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
block: Validate logical block size in blk_validate_limits()
authorJohn Garry <john.g.garry@oracle.com>
Mon, 8 Jul 2024 09:16:48 +0000 (09:16 +0000)
committerJens Axboe <axboe@kernel.dk>
Tue, 9 Jul 2024 06:00:17 +0000 (00:00 -0600)
Some drivers validate that their own logical block size. It is no harm to
always do this, so validate in blk_validate_limits().

This allows us to remove the validation in most of those drivers.

Add a comment to blk_validate_block_size() to inform users that self-
validation of LBS is usually unnecessary.

Signed-off-by: John Garry <john.g.garry@oracle.com>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Link: https://lore.kernel.org/r/20240708091651.177447-3-john.g.garry@oracle.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-settings.c
include/linux/blkdev.h

index 9fa4eed4df06b054bf6318acf1a2fc0f6da52c63..cd8a8eabc9a5eb589eff49417b38c116965e68f6 100644 (file)
@@ -235,6 +235,10 @@ static int blk_validate_limits(struct queue_limits *lim)
         */
        if (!lim->logical_block_size)
                lim->logical_block_size = SECTOR_SIZE;
+       else if (blk_validate_block_size(lim->logical_block_size)) {
+               pr_warn("Invalid logical block size (%d)\n", lim->logical_block_size);
+               return -EINVAL;
+       }
        if (lim->physical_block_size < lim->logical_block_size)
                lim->physical_block_size = lim->logical_block_size;
 
index 02e04df272828e8aeb5759bf71a0734632e11106..dce4a6bf73070848ca4ae6fa2ef234e4c7dfadcd 100644 (file)
@@ -268,6 +268,7 @@ static inline dev_t disk_devt(struct gendisk *disk)
        return MKDEV(disk->major, disk->first_minor);
 }
 
+/* blk_validate_limits() validates bsize, so drivers don't usually need to */
 static inline int blk_validate_block_size(unsigned long bsize)
 {
        if (bsize < 512 || bsize > PAGE_SIZE || !is_power_of_2(bsize))