mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
f5f0c11a67
Previously, our XFS fuzzing efforts were limited to using the xfs_db blocktrash command to scribble garbage all over a block. This is pretty easy to discover; it would be far more interesting if we could fuzz individual fields looking for unhandled corner cases. Since we now have an online scrub tool, use it to check for our targeted corruptions prior to the usual steps of writing to the FS, taking it offline, repairing, and re-checking. These tests use the new xfs_db 'fuzz' command to test corner case handling of every field. The 'print' command tells us which fields are available, and the fuzz command can write zeroes or ones to the field; set the high, middle, or low bit; add or subtract numbers; or randomize the field. We loop through all fields and all fuzz verbs to see if we can trip up the kernel. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <eguan@redhat.com> Signed-off-by: Eryu Guan <eguan@redhat.com>
66 lines
1.8 KiB
Bash
Executable File
66 lines
1.8 KiB
Bash
Executable File
#! /bin/bash
|
|
# FS QA Test No. 401
|
|
#
|
|
# Populate a XFS filesystem and fuzz every leaf-format attr block field.
|
|
# Use xfs_scrub to fix the corruption.
|
|
#
|
|
#-----------------------------------------------------------------------
|
|
# Copyright (c) 2017 Oracle, 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-1303 USA
|
|
#-----------------------------------------------------------------------
|
|
#
|
|
|
|
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 7 15
|
|
|
|
_cleanup()
|
|
{
|
|
cd /
|
|
rm -rf $tmp.*
|
|
}
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common/rc
|
|
. ./common/filter
|
|
. ./common/populate
|
|
. ./common/fuzzy
|
|
|
|
# real QA test starts here
|
|
_supported_os Linux
|
|
_supported_fs xfs
|
|
_require_scratch_xfs_fuzz_fields
|
|
|
|
echo "Format and populate"
|
|
_scratch_populate_cached nofill > $seqres.full 2>&1
|
|
|
|
echo "Find leaf-format attr block"
|
|
_scratch_mount
|
|
inum=$(stat -c '%i' $SCRATCH_MNT/ATTR.FMT_LEAF)
|
|
_scratch_unmount
|
|
|
|
echo "Fuzz leaf-format attr block"
|
|
_scratch_xfs_fuzz_metadata '' 'online' "inode ${inum}" 'ablock 0' >> $seqres.full
|
|
echo "Done fuzzing leaf-format attr block"
|
|
|
|
# success, all done
|
|
status=0
|
|
exit
|