diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 13c514684cfb..1d529e408f5c 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -1341,6 +1341,10 @@ struct btrfs_super_block *btrfs_read_disk_super(struct block_device *bdev, struct address_space *mapping = bdev->bd_mapping; int ret; + /* Reject devices with block size larger than PAGE_SIZE */ + if (bdev_logical_block_size(bdev) > 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) {