From: Zorro Lang <zlang@kernel.org>
To: Dave Chinner <david@fromorbit.com>
Cc: fstests@vger.kernel.org
Subject: Re: [PATCH 07/12] xfs/148: fix failure from bad shortform size assumptions
Date: Fri, 20 May 2022 15:34:38 +0800 [thread overview]
Message-ID: <20220520073438.bof3lpok2wx6krls@zlang-mailbox> (raw)
In-Reply-To: <20220517070111.1381936-8-david@fromorbit.com>
On Tue, May 17, 2022 at 05:01:06PM +1000, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
>
> We replaced an attr named:
>
> slashstr="are_bad_for_you"
>
> with this substitution:
>
> cp $imgfile $imgfile.old
> sed -b \
> -e "s/$nullstr/too_many\x00beans/g" \
> -e "s/$slashstr/are_bad\/for_you/g" \
> -i $imgfile
>
> We then try to retreive the attr named 'a_are_bad/for_you'. The
> failure is:
>
> -Attribute "a_are_bad/for_you" had a 3 byte value for TEST_DIR/mount-148/testfile:
> -heh
> +attr_get: No data available
> +Could not get "a_are_bad/for_you" for TEST_DIR/mount-148/testfile
>
> The error returned is ENODATA - the xattr does not exist. While the
> name might exist in the attr leaf block:
>
> ....
> nvlist[0].valuelen = 3
> nvlist[0].namelen = 17
> nvlist[0].name = "a_are_bad/for_you"
> nvlist[0].value = "heh"
> nvlist[1].valuelen = 3
> ....
>
> xattrs are not looked up by name matches when in leaf or node form
> like they are in short form. They are looked up by *name hash*
> matches, and if the hash is not found, then the name does not exist.
> Only if the has match is found, then it goes and retrieves the xattr
> pointed to by the hash and checks the name.
>
> At this point, it should be obvious that the hash of
> "a_are_bad_for_you" is different to "a_a_are_bad/for_you". Hence the
> leaf lookup is always rejected at the hash match stage and never
> gets to the name compare stage.
>
> IOWs, this test can *never* pass when the xattr is in leaf/node
> form, only when it is in short form.
>
> The reason the attr fork is in leaf form is that we are using
> "-m crc=0" and so the inodes are only 256 bytes in size and can only
> hold ~150 bytes in the literal area. That leaves ~100 bytes maximum
> for shortform attr data. The test consumes ~80 bytes of shortform
> space, so it should fit and the test pass.
>
> However:
>
> nvlist[4].valuelen = 37
> nvlist[4].namelen = 7
> nvlist[4].name = "selinux"
> nvlist[4].value = "unconfined_u:object_r:unlabeled_t:s0\000"
>
> Yes, I run the fstests with selinux enabled on some of test
> machines. The selinux attr pushes the attr fork way over the size
> that can fit in the shortform literal area, and so it moves to leaf
> form as the attrs are initially added and the test fails.
>
> Fix this by forcing the test to use 512 byte inodes, so as to
> provide around 350 bytes of usable attr fork literal area so it's
> not affected by security attributes.
>
> While there, clean up the silly conditional loop device cleanup
> code.
>
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> Reviewed-by: Darrick J. Wong <djwong@kernel.org>
> ---
> tests/xfs/148 | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/tests/xfs/148 b/tests/xfs/148
> index 8d50a642..5d0a0bf4 100755
> --- a/tests/xfs/148
> +++ b/tests/xfs/148
> @@ -15,7 +15,7 @@ _cleanup()
> {
> cd /
> $UMOUNT_PROG $mntpt > /dev/null 2>&1
> - test -n "$loopdev" && _destroy_loop_device $loopdev > /dev/null 2>&1
> + _destroy_loop_device $loopdev > /dev/null 2>&1
> rm -r -f $tmp.*
> }
>
> @@ -41,9 +41,12 @@ test_names=("something" "$nullstr" "$slashstr" "another")
> rm -f $imgfile $imgfile.old
>
> # Format image file w/o crcs so we can sed the image file
> +# We need to use 512 byte inodes to ensure the attr forks remain in short form
> +# even when security xattrs are present so we are always doing name matches on
> +# lookup and not name hash compares as leaf/node forms will do.
> $XFS_IO_PROG -f -c 'truncate 40m' $imgfile
> loopdev=$(_create_loop_device $imgfile)
> -MKFS_OPTIONS="-m crc=0" _mkfs_dev $loopdev >> $seqres.full
> +MKFS_OPTIONS="-m crc=0 -i size=512" _mkfs_dev $loopdev >> $seqres.full
It's good to me, although I'm wondering why you didn't choose to use
$SELINUX_MOUNT_OPTIONS [1]. Anyway, extending inode size can help too.
Reviewed-by: Zorro Lang <zlang@redhat.com>
[1]
-_mount $loopdev $mntpt
+_mount $loopdev $mntpt $SELINUX_MOUNT_OPTIONS
>
> # Mount image file
> mkdir -p $mntpt
> @@ -121,9 +124,6 @@ res=$?
> test $res -eq 1 || \
> echo "repair failed to report corruption ($res)"
>
> -_destroy_loop_device $loopdev
> -loopdev=
> -
> # success, all done
> status=0
> exit
> --
> 2.35.1
>
next prev parent reply other threads:[~2022-05-20 7:34 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-17 7:00 [PATCH 00/13 V2] fstests: fixes and more fixes Dave Chinner
2022-05-17 7:01 ` [PATCH 01/12] fstests: filter quota warnings Dave Chinner
2022-05-17 7:01 ` [PATCH 02/12] xfs/122: add attribute log formats to test output Dave Chinner
2022-05-17 7:01 ` [PATCH 03/12] xfs/348: golden output is not correct Dave Chinner
2022-05-17 7:01 ` [PATCH 04/12] fstests: fix group list generation for whacky test names Dave Chinner
2022-05-19 18:52 ` Darrick J. Wong
2022-05-20 8:36 ` Zorro Lang
2022-05-20 8:54 ` Zorro Lang
2022-05-20 9:25 ` Zorro Lang
2022-05-20 16:23 ` Darrick J. Wong
2022-05-21 0:27 ` Zorro Lang
2022-05-17 7:01 ` [PATCH 05/12] README: document _begin_fstests better Dave Chinner
2022-05-19 23:13 ` Darrick J. Wong
2022-05-20 1:58 ` Dave Chinner
2022-05-20 2:02 ` Darrick J. Wong
2022-05-20 5:23 ` Zorro Lang
2022-05-20 5:42 ` Dave Chinner
2022-05-20 6:16 ` Zorro Lang
2022-05-17 7:01 ` [PATCH 06/12] xfs/148: make test debuggable Dave Chinner
2022-05-19 18:55 ` Darrick J. Wong
2022-05-17 7:01 ` [PATCH 07/12] xfs/148: fix failure from bad shortform size assumptions Dave Chinner
2022-05-20 7:34 ` Zorro Lang [this message]
2022-05-21 23:22 ` Dave Chinner
2022-05-17 7:01 ` [PATCH 08/12] generic/081: don't run on DAX capable devices Dave Chinner
2022-05-18 5:11 ` Dave Chinner
2022-05-17 7:01 ` [PATCH 12/12] xfs/191: remove broken test Dave Chinner
2022-05-19 18:55 ` Darrick J. Wong
2022-05-17 7:49 ` [PATCH 00/13 V2] fstests: fixes and more fixes Dave Chinner
2022-05-17 8:24 ` Zorro Lang
2022-05-17 21:39 ` Dave Chinner
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=20220520073438.bof3lpok2wx6krls@zlang-mailbox \
--to=zlang@kernel.org \
--cc=david@fromorbit.com \
--cc=fstests@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.