xfs: xattr scrub should ensure one namespace bit per name
authorDarrick J. Wong <djwong@kernel.org>
Wed, 12 Apr 2023 02:00:29 +0000 (19:00 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Wed, 12 Apr 2023 02:00:29 +0000 (19:00 -0700)
Check that each extended attribute exists in only one namespace.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
fs/xfs/scrub/attr.c

index 5573be3..f6def9c 100644 (file)
@@ -128,10 +128,16 @@ xchk_xattr_listent(
                return;
        }
 
+       /* Only one namespace bit allowed. */
+       if (hweight32(flags & XFS_ATTR_NSP_ONDISK_MASK) > 1) {
+               xchk_fblock_set_corrupt(sx->sc, XFS_ATTR_FORK, args.blkno);
+               goto fail_xref;
+       }
+
        /* Does this name make sense? */
        if (!xfs_attr_namecheck(name, namelen)) {
                xchk_fblock_set_corrupt(sx->sc, XFS_ATTR_FORK, args.blkno);
-               return;
+               goto fail_xref;
        }
 
        /*