]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: don't consider future format versions valid
authorDave Chinner <dchinner@redhat.com>
Wed, 31 May 2023 09:14:21 +0000 (11:14 +0200)
committerCarlos Maiolino <cem@kernel.org>
Fri, 9 Jun 2023 08:27:50 +0000 (10:27 +0200)
Source kernel commit: aa88019851a85df80cb77f143758b13aee09e3d9

In commit fe08cc504448 we reworked the valid superblock version
checks. If it is a V5 filesystem, it is always valid, then we
checked if the version was less than V4 (reject) and then checked
feature fields in the V4 flags to determine if it was valid.

What we missed was that if the version is not V4 at this point,
we shoudl reject the fs. i.e. the check current treats V6+
filesystems as if it was a v4 filesystem. Fix this.

cc: stable@vger.kernel.org
Fixes: fe08cc504448 ("xfs: open code sb verifier feature checks")
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Dave Chinner <david@fromorbit.com>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
libxfs/xfs_sb.c

index 64b4e7beafd30b4bfff600a07ebed37c5d6a1527..59c0a94a1493aebe36a1bb2108a2323eeab9de67 100644 (file)
@@ -70,7 +70,8 @@ xfs_sb_validate_v5_features(
 }
 
 /*
- * We support all XFS versions newer than a v4 superblock with V2 directories.
+ * We current support XFS v5 formats with known features and v4 superblocks with
+ * at least V2 directories.
  */
 bool
 xfs_sb_good_version(
@@ -84,16 +85,16 @@ xfs_sb_good_version(
        if (xfs_sb_is_v5(sbp))
                return xfs_sb_validate_v5_features(sbp);
 
+       /* versions prior to v4 are not supported */
+       if (XFS_SB_VERSION_NUM(sbp) != XFS_SB_VERSION_4)
+               return false;
+
        /* We must not have any unknown v4 feature bits set */
        if ((sbp->sb_versionnum & ~XFS_SB_VERSION_OKBITS) ||
            ((sbp->sb_versionnum & XFS_SB_VERSION_MOREBITSBIT) &&
             (sbp->sb_features2 & ~XFS_SB_VERSION2_OKBITS)))
                return false;
 
-       /* versions prior to v4 are not supported */
-       if (XFS_SB_VERSION_NUM(sbp) < XFS_SB_VERSION_4)
-               return false;
-
        /* V4 filesystems need v2 directories and unwritten extents */
        if (!(sbp->sb_versionnum & XFS_SB_VERSION_DIRV2BIT))
                return false;