From: Yu Kuai Date: Sun, 18 Jun 2023 14:04:02 +0000 (+0800) Subject: block: fix wrong mode for blkdev_get_by_dev() from disk_scan_partitions() X-Git-Tag: nvme-6.5-2023-06-30~20 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=985958b8584cc143555f1bd735e7ab5066c944a7;p=nvme.git block: fix wrong mode for blkdev_get_by_dev() from disk_scan_partitions() After commit 2736e8eeb0cc ("block: use the holder as indication for exclusive opens"), blkdev_get_by_dev() will warn if holder is NULL and mode contains 'FMODE_EXCL'. holder from blkdev_get_by_dev() from disk_scan_partitions() is always NULL, hence it should not use 'FMODE_EXCL', which is broben by the commit. For consequence, WARN_ON_ONCE() will be triggered from blkdev_get_by_dev() if user scan partitions with device opened exclusively. Fix this problem by removing 'FMODE_EXCL' from disk_scan_partitions(), as it used to be. Reported-by: syzbot+00cd27751f78817f167b@syzkaller.appspotmail.com Link: https://syzkaller.appspot.com/bug?extid=00cd27751f78817f167b Fixes: 2736e8eeb0cc ("block: use the holder as indication for exclusive opens") Signed-off-by: Yu Kuai Reviewed-by: Christian Brauner Reviewed-by: Christoph Hellwig Link: https://lore.kernel.org/r/20230618140402.7556-1-yukuai1@huaweicloud.com Signed-off-by: Jens Axboe --- diff --git a/block/genhd.c b/block/genhd.c index f71f82991434..a94952ae9e39 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -366,7 +366,8 @@ int disk_scan_partitions(struct gendisk *disk, blk_mode_t mode) } set_bit(GD_NEED_PART_SCAN, &disk->state); - bdev = blkdev_get_by_dev(disk_devt(disk), mode, NULL, NULL); + bdev = blkdev_get_by_dev(disk_devt(disk), mode & ~FMODE_EXEC, NULL, + NULL); if (IS_ERR(bdev)) ret = PTR_ERR(bdev); else