Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

block2mtd: prevent direct access of bd_inode

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>

authored by

Yu Kuai and committed by
Al Viro
c9600c63 dc0fdfc8

+4 -2
+4 -2
drivers/mtd/devices/block2mtd.c
··· 265 265 struct file *bdev_file; 266 266 struct block_device *bdev; 267 267 struct block2mtd_dev *dev; 268 + loff_t size; 268 269 char *name; 269 270 270 271 if (!devname) ··· 292 291 goto err_free_block2mtd; 293 292 } 294 293 295 - if ((long)bdev->bd_inode->i_size % erase_size) { 294 + size = bdev_nr_bytes(bdev); 295 + if ((long)size % erase_size) { 296 296 pr_err("erasesize must be a divisor of device size\n"); 297 297 goto err_free_block2mtd; 298 298 } ··· 311 309 312 310 dev->mtd.name = name; 313 311 314 - dev->mtd.size = bdev->bd_inode->i_size & PAGE_MASK; 312 + dev->mtd.size = size & PAGE_MASK; 315 313 dev->mtd.erasesize = erase_size; 316 314 dev->mtd.writesize = 1; 317 315 dev->mtd.writebufsize = PAGE_SIZE;