Check for supported superblock checksum type before doing the actual
checksum validation of the superblock read from disk.
Signed-off-by: Johannes Thumshirn <jthumshirn@xxxxxxx>
---
fs/btrfs/disk-io.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index ab13282d91d2..74937effaed4 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -2822,6 +2822,14 @@ int open_ctree(struct super_block *sb,
goto fail_alloc;
}
+ if (!btrfs_supported_super_csum((struct btrfs_super_block *)
+ bh->b_data)) {
+ btrfs_err(fs_info, "unsupported checksum algorithm");
+ 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).
--
2.16.4