diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 13c514684cfb..d79e2a19c046 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -1341,6 +1341,9 @@ struct btrfs_super_block *btrfs_read_disk_super(struct block_device *bdev, struct address_space *mapping = bdev->bd_mapping; int ret; + if (!mapping->host || + (1 << mapping->host->i_blkbits) > PAGE_SIZE) + return ERR_PTR(-EINVAL); bytenr_orig = btrfs_sb_offset(copy_num); ret = btrfs_sb_log_location_bdev(bdev, copy_num, READ, &bytenr); if (ret < 0) {