Just like incompat flags check, although we have already done super csum
type check before calling btrfs_check_super_valid(), we can still add
such check for later write time check.

Signed-off-by: Qu Wenruo <w...@suse.com>
---
 fs/btrfs/disk-io.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 3968f7ff8de2..9282a6ac91db 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -3985,6 +3985,15 @@ static int btrfs_validate_super(struct btrfs_fs_info 
*fs_info)
                btrfs_err(fs_info, "no valid FS found");
                ret = -EINVAL;
        }
+       /*
+        * For write time check, as for mount time we have checked csum before
+        * calling btrfs_check_super_valid(), so it must be a corruption
+        */
+       if (btrfs_super_csum_type(sb) >= ARRAY_SIZE(btrfs_csum_sizes)) {
+               btrfs_err(fs_info, "corrupted csum type %u",
+                         btrfs_super_csum_type(sb));
+               ret = -EINVAL;
+       }
        if (btrfs_super_flags(sb) & ~BTRFS_SUPER_FLAG_SUPP) {
                btrfs_err(fs_info, "unrecognized or unsupported super flag: 
%llu",
                                btrfs_super_flags(sb) & ~BTRFS_SUPER_FLAG_SUPP);
-- 
2.17.0

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to