Commit a3163431 authored by Tetsuo Handa's avatar Tetsuo Handa Committed by Li Nan
Browse files

block: check minor range in device_add_disk()

mainline inclusion
from mainline-v5.17-rc1
commit e338924b
category: bugfix
bugzilla: 188733

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e338924bd05d6e71574bc13e310c89e10e49a8a5



----------------------------------------

ioctl(fd, LOOP_CTL_ADD, 1048576) causes

  sysfs: cannot create duplicate filename '/dev/block/7:0'

message because such request is treated as if ioctl(fd, LOOP_CTL_ADD, 0)
due to MINORMASK == 1048575. Verify that all minor numbers for that device
fit in the minor range.

Reported-by: default avatarwangyangbo <wangyangbo@uniontech.com>
Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/b1b19379-23ee-5379-0eb5-94bf5f79f1b4@i-love.sakura.ne.jp


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
conflict:
  block/genhd.c
Signed-off-by: default avatarZhong Jinghua <zhongjinghua@huawei.com>
Signed-off-by: default avatarLi Nan <linan122@huawei.com>
parent 99283414
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -795,6 +795,9 @@ static int __device_add_disk(struct device *parent, struct gendisk *disk,
	WARN_ON(!disk->minors &&
		!(disk->flags & (GENHD_FL_EXT_DEVT | GENHD_FL_HIDDEN)));

	if (disk->minors != 0 &&
		disk->first_minor + disk->minors > MINORMASK + 1)
		goto out_exit_elevator;
	retval = blk_alloc_devt(&disk->part0, &devt);
	if (retval)
		goto out_exit_elevator;