Skip to content

Commit

Permalink
block: check disk exist before trying to add partition
Browse files Browse the repository at this point in the history
If disk have been deleted, we should return fail for ioctl
BLKPG_DEL_PARTITION. Otherwise, the directory /sys/class/block
may remain invalid symlinks file. The race as following:

blkdev_open
				del_gendisk
				    disk->flags &= ~GENHD_FL_UP;
				    blk_drop_partitions
blkpg_ioctl
    bdev_add_partition
    add_partition
        device_add
	    device_add_class_symlinks

ioctl may add_partition after del_gendisk() have tried to delete
partitions. Then, symlinks file will be created.

Reviewed-by: Jan Kara <[email protected]>
Reviewed-by: Christoph Hellwig <[email protected]>
Signed-off-by: Yufen Yu <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jens Axboe <[email protected]>
  • Loading branch information
Yufen Yu authored and axboe committed Jul 1, 2021
1 parent efee99e commit b5cfbd3
Showing 1 changed file with 16 additions and 7 deletions.
23 changes: 16 additions & 7 deletions block/partitions/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -453,17 +453,26 @@ int bdev_add_partition(struct block_device *bdev, int partno,
sector_t start, sector_t length)
{
struct block_device *part;
struct gendisk *disk = bdev->bd_disk;
int ret;

mutex_lock(&bdev->bd_disk->open_mutex);
if (partition_overlaps(bdev->bd_disk, start, length, -1)) {
mutex_unlock(&bdev->bd_disk->open_mutex);
return -EBUSY;
mutex_lock(&disk->open_mutex);
if (!(disk->flags & GENHD_FL_UP)) {
ret = -ENXIO;
goto out;
}

part = add_partition(bdev->bd_disk, partno, start, length,
if (partition_overlaps(disk, start, length, -1)) {
ret = -EBUSY;
goto out;
}

part = add_partition(disk, partno, start, length,
ADDPART_FLAG_NONE, NULL);
mutex_unlock(&bdev->bd_disk->open_mutex);
return PTR_ERR_OR_ZERO(part);
ret = PTR_ERR_OR_ZERO(part);
out:
mutex_unlock(&disk->open_mutex);
return ret;
}

int bdev_del_partition(struct block_device *bdev, int partno)
Expand Down

0 comments on commit b5cfbd3

Please sign in to comment.