diff mbox series

[-next,v2] block: fix wrong mode for blkdev_get_by_dev() from disk_scan_partitions()

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

Commit Message

Yu Kuai June 18, 2023, 2:04 p.m. UTC
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>
---

Changes in v2:
 - fix a typo

 block/genhd.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Christoph Hellwig June 19, 2023, 4:59 a.m. UTC | #1
Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>
Christian Brauner June 20, 2023, 9:54 a.m. UTC | #2
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>
Jens Axboe June 20, 2023, 1:18 p.m. UTC | #3
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 mbox series

Patch

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