generic: add test for boundary in xfs_attr_shortform_verify
authorPavel Reichl <preichl@redhat.com>
Tue, 15 Sep 2020 13:26:51 +0000 (15:26 +0200)
committerEryu Guan <guaneryu@gmail.com>
Sun, 20 Sep 2020 15:53:06 +0000 (23:53 +0800)
Add a regression test to check that the boundary test
for the fixed-offset parts of xfs_attr_sf_entry
in xfs_attr_shortform_verify is not off by one.

This can be shown by:

touch file
setfattr -n user.a file

Signed-off-by: Pavel Reichl <preichl@redhat.com>
Reviewed-by: Zorro Lang <zlang@redhat.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
tests/generic/611 [new file with mode: 0755]
tests/generic/611.out [new file with mode: 0644]
tests/generic/group

diff --git a/tests/generic/611 b/tests/generic/611
new file mode 100755 (executable)
index 0000000..069db6f
--- /dev/null
@@ -0,0 +1,58 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2020 Red Hat, Inc. All Rights Reserved.
+#
+# FS QA Test 611
+#
+# Verify that metadata won't get corrupted when extended attribute
+# name of size one is set.
+#
+# This test verifies the problem fixed in kernel with commit
+# f4020438fab0 ("xfs: fix boundary test in xfs_attr_shortform_verify")
+
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1       # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+       cd /
+       rm -f $tmp.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+. ./common/attr
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+
+# real QA test starts here
+
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+_require_attrs
+
+_scratch_mkfs > $seqres.full 2>&1
+_scratch_mount
+
+localfile="${SCRATCH_MNT}/testfile"
+
+touch "${localfile}"
+"${SETFATTR_PROG}" -n user.a "${localfile}"
+
+# Make sure that changes are written to disk
+_scratch_cycle_mount
+
+# If the target bug isn't fixed, getfattr fails
+${GETFATTR_PROG} --absolute-names -n user.a $localfile | grep 'user.a'
+
+status=0
+exit
diff --git a/tests/generic/611.out b/tests/generic/611.out
new file mode 100644 (file)
index 0000000..1ab1243
--- /dev/null
@@ -0,0 +1,2 @@
+QA output created by 611
+user.a=""
index 8eba6c9..4af4b49 100644 (file)
 608 auto attr quick dax
 609 auto quick rw
 610 auto quick prealloc zero
 608 auto attr quick dax
 609 auto quick rw
 610 auto quick prealloc zero
+611 auto quick attr