]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/xfs/libxfs/xfs_alloc.c
Merge tag 'samsung-soc-4.10-2' of git://git.kernel.org/pub/scm/linux/kernel/git/krzk...
[karo-tx-linux.git] / fs / xfs / libxfs / xfs_alloc.c
index effb64cf714fee3894821a6d6796b3affd583faa..5050056a0b06445a93845987a52ec8356c499f80 100644 (file)
@@ -2455,12 +2455,15 @@ xfs_agf_verify(
              be32_to_cpu(agf->agf_flcount) <= XFS_AGFL_SIZE(mp)))
                return false;
 
-       if (be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]) > XFS_BTREE_MAXLEVELS ||
+       if (be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]) < 1 ||
+           be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]) < 1 ||
+           be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]) > XFS_BTREE_MAXLEVELS ||
            be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]) > XFS_BTREE_MAXLEVELS)
                return false;
 
        if (xfs_sb_version_hasrmapbt(&mp->m_sb) &&
-           be32_to_cpu(agf->agf_levels[XFS_BTNUM_RMAP]) > XFS_BTREE_MAXLEVELS)
+           (be32_to_cpu(agf->agf_levels[XFS_BTNUM_RMAP]) < 1 ||
+            be32_to_cpu(agf->agf_levels[XFS_BTNUM_RMAP]) > XFS_BTREE_MAXLEVELS))
                return false;
 
        /*
@@ -2477,7 +2480,8 @@ xfs_agf_verify(
                return false;
 
        if (xfs_sb_version_hasreflink(&mp->m_sb) &&
-           be32_to_cpu(agf->agf_refcount_level) > XFS_BTREE_MAXLEVELS)
+           (be32_to_cpu(agf->agf_refcount_level) < 1 ||
+            be32_to_cpu(agf->agf_refcount_level) > XFS_BTREE_MAXLEVELS))
                return false;
 
        return true;;