Check for supported superblock checksum type before doing the actual
checksum validation of the superblock read from disk.

Signed-off-by: Johannes Thumshirn <[email protected]>
---
 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

Reply via email to