From: "Darrick J. Wong" <djwong@kernel.org>
To: Dave Chinner <david@fromorbit.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 4/4] xfs: validate v5 feature fields
Date: Tue, 3 May 2022 15:59:18 -0700 [thread overview]
Message-ID: <20220503225918.GI8265@magnolia> (raw)
In-Reply-To: <20220502082018.1076561-5-david@fromorbit.com>
On Mon, May 02, 2022 at 06:20:18PM +1000, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
>
> Because stupid dumb fuzzers.
Dumb question: Should we make db_flds[] in db/sb.c (userspace) report
each individual feature flag as a field_t? I've been wondering why none
of my fuzz tests ever found these problems, and it's probably because
it never hit the magic bits that $scriptkiddie happened to hit.
Modulo hch's comments,
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
--D
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> ---
> fs/xfs/libxfs/xfs_sb.c | 67 +++++++++++++++++++++++++++++++++++-------
> 1 file changed, 57 insertions(+), 10 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c
> index ec6eec5c0e02..d1afe0d43d7f 100644
> --- a/fs/xfs/libxfs/xfs_sb.c
> +++ b/fs/xfs/libxfs/xfs_sb.c
> @@ -30,6 +30,46 @@
> * Physical superblock buffer manipulations. Shared with libxfs in userspace.
> */
>
> +/*
> + * Validate all the compulsory V4 feature bits are set on a V5 filesystem.
> + */
> +bool
> +xfs_sb_validate_v5_features(
> + struct xfs_sb *sbp)
> +{
> + /* We must not have any unknown V4 feature bits set */
> + if (sbp->sb_versionnum & ~XFS_SB_VERSION_OKBITS)
> + return false;
> +
> + /*
> + * The CRC bit is considered an invalid V4 flag, so we have to add it
> + * manually to the OKBITS mask.
> + */
> + if (sbp->sb_features2 & ~(XFS_SB_VERSION2_OKBITS |
> + XFS_SB_VERSION2_CRCBIT))
> + return false;
> +
> + /* Now check all the required V4 feature flags are set. */
> +
> +#define V5_VERS_FLAGS (XFS_SB_VERSION_NLINKBIT | \
> + XFS_SB_VERSION_ALIGNBIT | \
> + XFS_SB_VERSION_LOGV2BIT | \
> + XFS_SB_VERSION_EXTFLGBIT | \
> + XFS_SB_VERSION_DIRV2BIT | \
> + XFS_SB_VERSION_MOREBITSBIT)
> +
> +#define V5_FEAT_FLAGS (XFS_SB_VERSION2_LAZYSBCOUNTBIT | \
> + XFS_SB_VERSION2_ATTR2BIT | \
> + XFS_SB_VERSION2_PROJID32BIT | \
> + XFS_SB_VERSION2_CRCBIT)
> +
> + if ((sbp->sb_versionnum & V5_VERS_FLAGS) != V5_VERS_FLAGS)
> + return false;
> + if ((sbp->sb_features2 & V5_FEAT_FLAGS) != V5_FEAT_FLAGS)
> + return false;
> + return true;
> +}
> +
> /*
> * We support all XFS versions newer than a v4 superblock with V2 directories.
> */
> @@ -37,9 +77,19 @@ bool
> xfs_sb_good_version(
> struct xfs_sb *sbp)
> {
> - /* all v5 filesystems are supported */
> + /*
> + * All v5 filesystems are supported, but we must check that all the
> + * required v4 feature flags are enabled correctly as the code checks
> + * those flags and not for v5 support.
> + */
> if (xfs_sb_is_v5(sbp))
> - return true;
> + return xfs_sb_validate_v5_features(sbp);
> +
> + /* 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)
> @@ -51,12 +101,6 @@ xfs_sb_good_version(
> if (!(sbp->sb_versionnum & XFS_SB_VERSION_EXTFLGBIT))
> return false;
>
> - /* And 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;
> -
> /* It's a supported v4 filesystem */
> return true;
> }
> @@ -267,12 +311,15 @@ xfs_validate_sb_common(
> bool has_dalign;
>
> if (!xfs_verify_magic(bp, dsb->sb_magicnum)) {
> - xfs_warn(mp, "bad magic number");
> + xfs_warn(mp,
> +"Superblock has bad magic number 0x%x. Not an XFS filesystem?",
> + be32_to_cpu(dsb->sb_magicnum));
> return -EWRONGFS;
> }
>
> if (!xfs_sb_good_version(sbp)) {
> - xfs_warn(mp, "bad version");
> + xfs_warn(mp,
> +"Superblock has unknown features enabled or corrupted feature masks.");
> return -EWRONGFS;
> }
>
> --
> 2.35.1
>
next prev parent reply other threads:[~2022-05-03 22:59 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-02 8:20 [PATCH 0/4] xfs: fix random format verification issues Dave Chinner
2022-05-02 8:20 ` [PATCH 1/4] xfs: detect self referencing btree sibling pointers Dave Chinner
2022-05-03 14:53 ` Christoph Hellwig
2022-05-03 21:27 ` Dave Chinner
2022-05-03 22:53 ` Darrick J. Wong
2022-05-03 23:13 ` Dave Chinner
2022-05-06 9:22 ` [xfs] 32678f1513: aim7.jobs-per-min -5.6% regression kernel test robot
2022-05-06 9:22 ` kernel test robot
2022-05-06 21:29 ` Dave Chinner
2022-05-06 21:29 ` Dave Chinner
2022-05-07 11:09 ` [LKP] " Carel Si
2022-05-07 11:09 ` Carel Si
2022-05-09 0:03 ` [LKP] " Dave Chinner
2022-05-09 0:03 ` Dave Chinner
2022-05-02 8:20 ` [PATCH 2/4] xfs: validate inode fork size against fork format Dave Chinner
2022-05-03 14:55 ` Christoph Hellwig
2022-05-03 22:55 ` Darrick J. Wong
2022-05-02 8:20 ` [PATCH 3/4] xfs: set XFS_FEAT_NLINK correctly Dave Chinner
2022-05-03 14:56 ` Christoph Hellwig
2022-05-03 22:55 ` Darrick J. Wong
2022-05-02 8:20 ` [PATCH 4/4] xfs: validate v5 feature fields Dave Chinner
2022-05-02 9:44 ` kernel test robot
2022-05-02 12:37 ` kernel test robot
2022-05-03 15:00 ` Christoph Hellwig
2022-05-03 21:26 ` Dave Chinner
2022-05-03 22:59 ` Darrick J. Wong [this message]
2022-05-03 23:18 ` Dave Chinner
2022-05-03 23:28 ` Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220503225918.GI8265@magnolia \
--to=djwong@kernel.org \
--cc=david@fromorbit.com \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.