• Yu Kuai's avatar
    nbd: fix max value for 'first_minor' · e4c4871a
    Yu Kuai authored
    commit b1a81163 ("block: nbd: add sanity check for first_minor")
    checks that 'first_minor' should not be greater than 0xff, which is
    wrong. Whitout the commit, the details that when user pass 0x100000,
    it ends up create sysfs dir "/sys/block/43:0" are as follows:
    
    nbd_dev_add
     disk->first_minor = index << part_shift
      -> default part_shift is 5, first_minor is 0x2000000
      device_add_disk
       ddev->devt = MKDEV(disk->major, disk->first_minor)
        -> (0x2b << 20) | (0x2000000) = 0x2b00000
       device_add
        device_create_sys_dev_entry
    	 format_dev_t
    	  sprintf(buffer, "%u:%u", MAJOR(dev), MINOR(dev));
    	   -> got 43:0
    	  sysfs_create_link -> /sys/block/43:0
    
    By the way, with the wrong fix, when part_shift is the default value,
    only 8 ndb devices can be created since 8 << 5 is greater than 0xff.
    
    Since the max bits for 'first_minor' should be the same as what
    MKDEV() does, which is 20. Change the upper bound of 'first_minor'
    from 0xff to 0xfffff.
    
    Fixes: b1a81163 ("block: nbd: add sanity check for first_minor")
    Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
    Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Link: https://lore.kernel.org/r/20211102015237.2309763-2-yebin10@huawei.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    e4c4871a
nbd.c 64.4 KB