xfs: test repairing false positive reserved attr name use

xfs_repair compares attr names in the root namespace to
two special/reserved names, "SGI_ACL_FILE" and "SGI_ACL_DEFAULT"
and if the value in them aren't valid acls, flags this as
an inconsistency.

However, due to various bugs, xfs_repair may only compare
a smaller portion of the on-disk value; hence either
substrings or superstrings may match, and false-positive
corruption will be detected.  This test checks for those
false positives; i.e. the ACL names created in this test
may cause xfs_repair to "fix" them, but it should not.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
Eric Sandeen
2015-05-26 12:51:57 +10:00
committed by Dave Chinner
parent 51a36c71b4
commit fa4fcb5294
3 changed files with 96 additions and 0 deletions
Executable
+84
View File
@@ -0,0 +1,84 @@
#! /bin/bash
# FS QA Test 053
#
# Ensure that xfs_repair can properly spot SGI_ACL_FILE
# and SGI_ACL_DEFAULT in the root attr namespace.
#
# Due to bugs here and there, we sometimes matched on partial
# strings with those names, and threw off xfs_repair.
#
#-----------------------------------------------------------------------
# Copyright (c) 2015 Red Hat, Inc. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------
#
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"
here=`pwd`
tmp=/tmp/$$
status=1 # failure is the default!
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/attr
_cleanup()
{
cd /
rm -f $tmp.*
}
trap "_cleanup; exit \$status" 0 1 2 3 15
# real QA test starts here
_supported_fs xfs
_supported_os IRIX Linux
_require_scratch
_require_attrs
_scratch_mkfs >/dev/null 2>&1
_scratch_mount
# Create root attr names which are substrings or superstrings
# of the reserved ACL names, and make sure xfs_repair copes.
# Due to various bugs, either the compared length was shorter
# than the reserved name (7 chars), so substrings matched, and/or only
# the reserved name length was compared, so superstrings matched.
rm -f $SCRATCH_MNT/$seq.*
# actual reserved names:
# SGI_ACL_FILE SGI_ACL_DEFAULT
for NAME in SGI_ACL \
SGI_ACL_F SGI_ACL_D \
SGI_ACL_FILE_FOO SGI_ACL_DEFAULT_FOO; do
touch $SCRATCH_MNT/${seq}.${NAME}
$ATTR_PROG -R -s $NAME -V "Wow, such $NAME" $SCRATCH_MNT/$seq.$NAME \
| _filter_scratch
done
# Older repair failed because it sees the above names as matching
# SGI_ACL_FILE / SGI_ACL_DEFAULT but w/o valid acls on them
# The test harness will catch this (false positive) corruption
# success, all done
status=0
exit
+11
View File
@@ -0,0 +1,11 @@
QA output created by 053
Attribute "SGI_ACL" set to a 17 byte value for SCRATCH_MNT/053.SGI_ACL:
Wow, such SGI_ACL
Attribute "SGI_ACL_F" set to a 19 byte value for SCRATCH_MNT/053.SGI_ACL_F:
Wow, such SGI_ACL_F
Attribute "SGI_ACL_D" set to a 19 byte value for SCRATCH_MNT/053.SGI_ACL_D:
Wow, such SGI_ACL_D
Attribute "SGI_ACL_FILE_FOO" set to a 26 byte value for SCRATCH_MNT/053.SGI_ACL_FILE_FOO:
Wow, such SGI_ACL_FILE_FOO
Attribute "SGI_ACL_DEFAULT_FOO" set to a 29 byte value for SCRATCH_MNT/053.SGI_ACL_DEFAULT_FOO:
Wow, such SGI_ACL_DEFAULT_FOO
+1
View File
@@ -50,6 +50,7 @@
050 quota auto quick
051 auto log metadata
052 quota db auto quick
053 attr acl repair quick auto
054 quota auto quick
055 dump ioctl remote tape
056 dump ioctl auto quick