summaryrefslogtreecommitdiff
path: root/fs/btrfs/disk-io.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r--fs/btrfs/disk-io.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 3f3bb70ca437..ce6dc95effae 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -2817,6 +2817,20 @@ int open_ctree(struct super_block *sb,
}
/*
+ * Verify the type first, if that or the the checksum value are
+ * corrupted, we'll find out
+ */
+ if (!btrfs_supported_super_csum(btrfs_super_csum_type(
+ (struct btrfs_super_block *) bh->b_data))) {
+ btrfs_err(fs_info, "unsupported checksum algorithm: %u",
+ btrfs_super_csum_type((struct btrfs_super_block *)
+ bh->b_data));
+ err = -EINVAL;
+ brelse(bh);
+ goto fail_alloc;
+ }
+
+ /*
* We want to check superblock checksum, the type is stored inside.
* Pass the whole disk block of size BTRFS_SUPER_INFO_SIZE (4k).
*/