Message ID | 20230618140402.7556-1-yukuai1@huaweicloud.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [-next,v2] block: fix wrong mode for blkdev_get_by_dev() from disk_scan_partitions() | expand |
Looks good:
Reviewed-by: Christoph Hellwig <hch@lst.de>
On Sun, Jun 18, 2023 at 10:04:02PM +0800, Yu Kuai wrote: > From: Yu Kuai <yukuai3@huawei.com> > > 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 <yukuai3@huawei.com> > --- Looks good to me, Reviewed-by: Christian Brauner <brauner@kernel.org>
On Sun, 18 Jun 2023 22:04:02 +0800, Yu Kuai wrote: > 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. > > [...] Applied, thanks! [1/1] block: fix wrong mode for blkdev_get_by_dev() from disk_scan_partitions() commit: 985958b8584cc143555f1bd735e7ab5066c944a7 Best regards,
diff --git a/block/genhd.c b/block/genhd.c index 2c2f9a716822..d1e845ae1b32 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -365,7 +365,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