block2mtd: prevent direct access of bd_inode
authorYu Kuai <yukuai3@huawei.com>
Thu, 11 Apr 2024 14:53:46 +0000 (15:53 +0100)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 3 May 2024 06:36:21 +0000 (02:36 -0400)
All we need is size, and that can be obtained via bdev_nr_bytes()

Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Link: https://lore.kernel.org/r/20240411145346.2516848-11-viro@zeniv.linux.org.uk
Signed-off-by: Christian Brauner <brauner@kernel.org>
drivers/mtd/devices/block2mtd.c

index caacdc0a3819458fbb47faae23432f5950fe5869..b06c8dd515624c22e7d8d6c87f539de267324e13 100644 (file)
@@ -265,6 +265,7 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size,
        struct file *bdev_file;
        struct block_device *bdev;
        struct block2mtd_dev *dev;
+       loff_t size;
        char *name;
 
        if (!devname)
@@ -291,7 +292,8 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size,
                goto err_free_block2mtd;
        }
 
-       if ((long)bdev->bd_inode->i_size % erase_size) {
+       size = bdev_nr_bytes(bdev);
+       if ((long)size % erase_size) {
                pr_err("erasesize must be a divisor of device size\n");
                goto err_free_block2mtd;
        }
@@ -309,7 +311,7 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size,
 
        dev->mtd.name = name;
 
-       dev->mtd.size = bdev->bd_inode->i_size & PAGE_MASK;
+       dev->mtd.size = size & PAGE_MASK;
        dev->mtd.erasesize = erase_size;
        dev->mtd.writesize = 1;
        dev->mtd.writebufsize = PAGE_SIZE;