From: Darrick J. Wong <djwong@xxxxxxxxxx> Test what happens when we fuzz the key/pointer blocks (aka the interior nodes) of the inode btree. Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> --- tests/xfs/1570 | 36 ++++++++++++++++++++++++++++++++++++ tests/xfs/1570.out | 4 ++++ tests/xfs/1571 | 36 ++++++++++++++++++++++++++++++++++++ tests/xfs/1571.out | 4 ++++ tests/xfs/1572 | 38 ++++++++++++++++++++++++++++++++++++++ tests/xfs/1572.out | 4 ++++ tests/xfs/1573 | 37 +++++++++++++++++++++++++++++++++++++ tests/xfs/1573.out | 4 ++++ 8 files changed, 163 insertions(+) create mode 100755 tests/xfs/1570 create mode 100644 tests/xfs/1570.out create mode 100755 tests/xfs/1571 create mode 100644 tests/xfs/1571.out create mode 100755 tests/xfs/1572 create mode 100755 tests/xfs/1572.out create mode 100755 tests/xfs/1573 create mode 100644 tests/xfs/1573.out diff --git a/tests/xfs/1570 b/tests/xfs/1570 new file mode 100755 index 0000000000..c2d144e298 --- /dev/null +++ b/tests/xfs/1570 @@ -0,0 +1,36 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2022 Oracle, Inc. All Rights Reserved. +# +# FS QA Test No. 1570 +# +# Populate a XFS filesystem and fuzz every inobt key/pointer field. +# Use xfs_repair to fix the corruption. +# +. ./common/preamble +_begin_fstest dangerous_fuzzers dangerous_scrub dangerous_repair + +_register_cleanup "_cleanup" BUS + +# Import common functions. +. ./common/filter +. ./common/populate +. ./common/fuzzy + +# real QA test starts here +_supported_fs xfs +_require_scratch_xfs_fuzz_fields + +echo "Format and populate" +_scratch_populate_cached nofill > $seqres.full 2>&1 + +path="$(_scratch_xfs_find_agbtree_height 'ino' 2)" || \ + _fail "could not find two-level inobt" + +echo "Fuzz inobt" +_scratch_xfs_fuzz_metadata '' 'offline' "$path" 'addr root' >> $seqres.full +echo "Done fuzzing inobt" + +# success, all done +status=0 +exit diff --git a/tests/xfs/1570.out b/tests/xfs/1570.out new file mode 100644 index 0000000000..b3977dca57 --- /dev/null +++ b/tests/xfs/1570.out @@ -0,0 +1,4 @@ +QA output created by 1570 +Format and populate +Fuzz inobt +Done fuzzing inobt diff --git a/tests/xfs/1571 b/tests/xfs/1571 new file mode 100755 index 0000000000..c64b321ff6 --- /dev/null +++ b/tests/xfs/1571 @@ -0,0 +1,36 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2022 Oracle, Inc. All Rights Reserved. +# +# FS QA Test No. 1571 +# +# Populate a XFS filesystem and fuzz every inobt key/pointer field. +# Use xfs_scrub to fix the corruption. +# +. ./common/preamble +_begin_fstest dangerous_fuzzers dangerous_scrub dangerous_online_repair + +_register_cleanup "_cleanup" BUS + +# Import common functions. +. ./common/filter +. ./common/populate +. ./common/fuzzy + +# real QA test starts here +_supported_fs xfs +_require_scratch_xfs_fuzz_fields + +echo "Format and populate" +_scratch_populate_cached nofill > $seqres.full 2>&1 + +path="$(_scratch_xfs_find_agbtree_height 'ino' 2)" || \ + _fail "could not find two-level inobt" + +echo "Fuzz inobt" +_scratch_xfs_fuzz_metadata '' 'online' "$path" 'addr root' >> $seqres.full +echo "Done fuzzing inobt" + +# success, all done +status=0 +exit diff --git a/tests/xfs/1571.out b/tests/xfs/1571.out new file mode 100644 index 0000000000..292e8bdec4 --- /dev/null +++ b/tests/xfs/1571.out @@ -0,0 +1,4 @@ +QA output created by 1571 +Format and populate +Fuzz inobt +Done fuzzing inobt diff --git a/tests/xfs/1572 b/tests/xfs/1572 new file mode 100755 index 0000000000..abcdc2397f --- /dev/null +++ b/tests/xfs/1572 @@ -0,0 +1,38 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (c) 2022 Oracle. All Rights Reserved. +# +# FS QA Test No. 1572 +# +# Populate a XFS filesystem and fuzz every inobt key/pointer field. +# Try online repair and, if necessary, offline repair, +# to test the most likely usage pattern. + +. ./common/preamble +_begin_fstest dangerous_fuzzers dangerous_bothrepair + +_register_cleanup "_cleanup" BUS + +# Import common functions. +. ./common/filter +. ./common/populate +. ./common/fuzzy + +# real QA test starts here +_supported_fs xfs +_require_scratch_xfs_fuzz_fields +_disable_dmesg_check + +echo "Format and populate" +_scratch_populate_cached nofill > $seqres.full 2>&1 + +path="$(_scratch_xfs_find_agbtree_height 'ino' 2)" || \ + _fail "could not find two-level inobt" + +echo "Fuzz inobt" +_scratch_xfs_fuzz_metadata '' 'both' "$path" 'addr root' >> $seqres.full +echo "Done fuzzing inobt" + +# success, all done +status=0 +exit diff --git a/tests/xfs/1572.out b/tests/xfs/1572.out new file mode 100755 index 0000000000..8afa3ea075 --- /dev/null +++ b/tests/xfs/1572.out @@ -0,0 +1,4 @@ +QA output created by 1572 +Format and populate +Fuzz inobt +Done fuzzing inobt diff --git a/tests/xfs/1573 b/tests/xfs/1573 new file mode 100755 index 0000000000..7a816e59b8 --- /dev/null +++ b/tests/xfs/1573 @@ -0,0 +1,37 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2022 Oracle, Inc. All rights reserved. +# +# FS QA Test No. 1573 +# +# Populate a XFS filesystem and fuzz every inobt key/pointer field. +# Do not fix the filesystem, to test metadata verifiers. + +. ./common/preamble +_begin_fstest dangerous_fuzzers dangerous_norepair + +_register_cleanup "_cleanup" BUS + +# Import common functions. +. ./common/filter +. ./common/populate +. ./common/fuzzy + +# real QA test starts here +_supported_fs xfs +_require_scratch_xfs_fuzz_fields +_disable_dmesg_check + +echo "Format and populate" +_scratch_populate_cached nofill > $seqres.full 2>&1 + +path="$(_scratch_xfs_find_agbtree_height 'ino' 2)" || \ + _fail "could not find two-level inobt" + +echo "Fuzz inobt" +_scratch_xfs_fuzz_metadata '' 'none' "$path" 'addr root' >> $seqres.full +echo "Done fuzzing inobt" + +# success, all done +status=0 +exit diff --git a/tests/xfs/1573.out b/tests/xfs/1573.out new file mode 100644 index 0000000000..cef5aef758 --- /dev/null +++ b/tests/xfs/1573.out @@ -0,0 +1,4 @@ +QA output created by 1573 +Format and populate +Fuzz inobt +Done fuzzing inobt