mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
xfs: fix blocktrash fuzzers
The blocktrash fuzz tests for xfs will try to mount and write to the filesystem after corrupting it. However, the mount may not necessarily succeed, in which case we must not write junk to the root filesystem. Use the new _try_scratch_mount to guard against that. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
This commit is contained in:
committed by
Eryu Guan
parent
e2fd1a080e
commit
0828657542
+7
-6
@@ -93,13 +93,14 @@ done
|
||||
|
||||
# Try to append to files; this should fail
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify files"
|
||||
for x in `seq 1 64`; do
|
||||
$XFS_IO_PROG -f -c "pwrite -S 0x62 0 ${blksz}" "${TESTFILE}.${x}" >> $seqres.full
|
||||
done
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify files"
|
||||
for x in `seq 1 64`; do
|
||||
$XFS_IO_PROG -f -c "pwrite -S 0x62 0 ${blksz}" "${TESTFILE}.${x}" >> $seqres.full
|
||||
done
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+9
-8
@@ -91,15 +91,16 @@ for ag in $(seq 1 $((agcount - 1))) 0; do
|
||||
done
|
||||
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify files"
|
||||
broken=0
|
||||
for x in `seq 65 70`; do
|
||||
touch "${TESTFILE}.${x}" 2> /dev/null || broken=1
|
||||
done
|
||||
echo "broken: ${broken}"
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify files"
|
||||
broken=0
|
||||
for x in `seq 65 70`; do
|
||||
touch "${TESTFILE}.${x}" 2> /dev/null || broken=1
|
||||
done
|
||||
echo "broken: ${broken}"
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+7
-6
@@ -92,13 +92,14 @@ done
|
||||
|
||||
# Try to append to files; this should fail
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify files"
|
||||
for x in `seq 1 64`; do
|
||||
$XFS_IO_PROG -f -c "pwrite -S 0x62 0 ${blksz}" "${TESTFILE}.${x}" >> $seqres.full
|
||||
done
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify files"
|
||||
for x in `seq 1 64`; do
|
||||
$XFS_IO_PROG -f -c "pwrite -S 0x62 0 ${blksz}" "${TESTFILE}.${x}" >> $seqres.full
|
||||
done
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+7
-6
@@ -92,13 +92,14 @@ done
|
||||
|
||||
# Try to append to files; this should fail
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify files"
|
||||
for x in `seq 1 64`; do
|
||||
$XFS_IO_PROG -f -c "pwrite -S 0x62 0 ${blksz}" "${TESTFILE}.${x}" >> $seqres.full
|
||||
done
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify files"
|
||||
for x in `seq 1 64`; do
|
||||
$XFS_IO_PROG -f -c "pwrite -S 0x62 0 ${blksz}" "${TESTFILE}.${x}" >> $seqres.full
|
||||
done
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+7
-6
@@ -92,13 +92,14 @@ done
|
||||
|
||||
# Try to append to files; this should fail
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify files"
|
||||
for x in `seq 1 64`; do
|
||||
$XFS_IO_PROG -f -c "pwrite -S 0x62 0 ${blksz}" "${TESTFILE}.${x}" >> $seqres.full
|
||||
done
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify files"
|
||||
for x in `seq 1 64`; do
|
||||
$XFS_IO_PROG -f -c "pwrite -S 0x62 0 ${blksz}" "${TESTFILE}.${x}" >> $seqres.full
|
||||
done
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+9
-8
@@ -91,15 +91,16 @@ for ag in $(seq 1 $((agcount - 1))) 0; do
|
||||
done
|
||||
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify files"
|
||||
broken=0
|
||||
for x in `seq 65 70`; do
|
||||
touch "${TESTFILE}.${x}" 2> /dev/null || broken=1
|
||||
done
|
||||
echo "broken: ${broken}"
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify files"
|
||||
broken=0
|
||||
for x in `seq 65 70`; do
|
||||
touch "${TESTFILE}.${x}" 2> /dev/null || broken=1
|
||||
done
|
||||
echo "broken: ${broken}"
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+9
-8
@@ -94,15 +94,16 @@ for ag in $(seq 1 $((agcount - 1))) 0; do
|
||||
done
|
||||
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify files"
|
||||
broken=0
|
||||
for x in `seq 65 70`; do
|
||||
touch "${TESTFILE}.${x}" 2> /dev/null || broken=1
|
||||
done
|
||||
echo "broken: ${broken}"
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify files"
|
||||
broken=0
|
||||
for x in `seq 65 70`; do
|
||||
touch "${TESTFILE}.${x}" 2> /dev/null || broken=1
|
||||
done
|
||||
echo "broken: ${broken}"
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+6
-5
@@ -82,12 +82,13 @@ echo "+ corrupt dir"
|
||||
_scratch_xfs_db -x -c "inode ${inode}" -c 'dblock 0' -c "stack" -c "blocktrash -x 32 -y $((blksz * 8)) -z ${FUZZ_ARGS}" >> $seqres.full
|
||||
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify dir"
|
||||
rm -rf "${SCRATCH_MNT}/blockdir/00000000" 2> /dev/null && _fail "modified corrupt directory"
|
||||
mkdir "${SCRATCH_MNT}/blockdir/xxxxxxxx" 2> /dev/null && _fail "add to corrupt directory"
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify dir"
|
||||
rm -rf "${SCRATCH_MNT}/blockdir/00000000" 2> /dev/null && _fail "modified corrupt directory"
|
||||
mkdir "${SCRATCH_MNT}/blockdir/xxxxxxxx" 2> /dev/null && _fail "add to corrupt directory"
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+6
-5
@@ -87,12 +87,13 @@ while true; do
|
||||
done
|
||||
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify dir"
|
||||
rm -rf "${SCRATCH_MNT}/blockdir/00000000" 2> /dev/null && _fail "modified corrupt directory"
|
||||
mkdir "${SCRATCH_MNT}/blockdir/xxxxxxxx" 2> /dev/null && _fail "add to corrupt directory"
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify dir"
|
||||
rm -rf "${SCRATCH_MNT}/blockdir/00000000" 2> /dev/null && _fail "modified corrupt directory"
|
||||
mkdir "${SCRATCH_MNT}/blockdir/xxxxxxxx" 2> /dev/null && _fail "add to corrupt directory"
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+6
-5
@@ -82,12 +82,13 @@ echo "+ corrupt dir"
|
||||
_scratch_xfs_db -x -c "inode ${inode}" -c "dblock ${leaf_lblk}" -c "stack" -c "blocktrash -x 32 -y $((blksz * 8)) -z ${FUZZ_ARGS}" >> $seqres.full
|
||||
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify dir"
|
||||
rm -rf "${SCRATCH_MNT}/blockdir/00000000" 2> /dev/null && _fail "modified corrupt directory"
|
||||
mkdir "${SCRATCH_MNT}/blockdir/xxxxxxxx" 2> /dev/null && _fail "add to corrupt directory"
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify dir"
|
||||
rm -rf "${SCRATCH_MNT}/blockdir/00000000" 2> /dev/null && _fail "modified corrupt directory"
|
||||
mkdir "${SCRATCH_MNT}/blockdir/xxxxxxxx" 2> /dev/null && _fail "add to corrupt directory"
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+6
-5
@@ -87,12 +87,13 @@ while true; do
|
||||
done
|
||||
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify dir"
|
||||
rm -rf "${SCRATCH_MNT}/blockdir/00000000" 2> /dev/null && _fail "modified corrupt directory"
|
||||
mkdir "${SCRATCH_MNT}/blockdir/xxxxxxxx" 2> /dev/null && _fail "add to corrupt directory"
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify dir"
|
||||
rm -rf "${SCRATCH_MNT}/blockdir/00000000" 2> /dev/null && _fail "modified corrupt directory"
|
||||
mkdir "${SCRATCH_MNT}/blockdir/xxxxxxxx" 2> /dev/null && _fail "add to corrupt directory"
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+6
-5
@@ -87,12 +87,13 @@ while true; do
|
||||
done
|
||||
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify dir"
|
||||
rm -rf "${SCRATCH_MNT}/blockdir/00000000" 2> /dev/null && _fail "modified corrupt directory"
|
||||
mkdir "${SCRATCH_MNT}/blockdir/xxxxxxxx" 2> /dev/null && _fail "add to corrupt directory"
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify dir"
|
||||
rm -rf "${SCRATCH_MNT}/blockdir/00000000" 2> /dev/null && _fail "modified corrupt directory"
|
||||
mkdir "${SCRATCH_MNT}/blockdir/xxxxxxxx" 2> /dev/null && _fail "add to corrupt directory"
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+6
-5
@@ -87,12 +87,13 @@ while true; do
|
||||
done
|
||||
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify dir"
|
||||
rm -rf "${SCRATCH_MNT}/blockdir/00000000" 2> /dev/null && _fail "modified corrupt directory"
|
||||
mkdir "${SCRATCH_MNT}/blockdir/xxxxxxxx" 2> /dev/null && _fail "add to corrupt directory"
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify dir"
|
||||
rm -rf "${SCRATCH_MNT}/blockdir/00000000" 2> /dev/null && _fail "modified corrupt directory"
|
||||
mkdir "${SCRATCH_MNT}/blockdir/xxxxxxxx" 2> /dev/null && _fail "add to corrupt directory"
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+6
-5
@@ -87,12 +87,13 @@ while true; do
|
||||
done
|
||||
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify dir"
|
||||
rm -rf "${SCRATCH_MNT}/blockdir/00000000" 2> /dev/null && _fail "modified corrupt directory"
|
||||
mkdir "${SCRATCH_MNT}/blockdir/xxxxxxxx" 2> /dev/null && _fail "add to corrupt directory"
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify dir"
|
||||
rm -rf "${SCRATCH_MNT}/blockdir/00000000" 2> /dev/null && _fail "modified corrupt directory"
|
||||
mkdir "${SCRATCH_MNT}/blockdir/xxxxxxxx" 2> /dev/null && _fail "add to corrupt directory"
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+12
-11
@@ -90,18 +90,19 @@ seq "${inode}" "$((inode + 64))" | while read ino; do
|
||||
done
|
||||
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify files"
|
||||
broken=0
|
||||
for x in `seq 1 64`; do
|
||||
stat "${TESTFILE}.${x}" >> $seqres.full 2>&1
|
||||
test $? -ne 0 && broken=1
|
||||
touch "${TESTFILE}.${x}" >> $seqres.full 2>&1
|
||||
test $? -ne 0 && broken=1
|
||||
done
|
||||
echo "broken: ${broken}"
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify files"
|
||||
broken=0
|
||||
for x in `seq 1 64`; do
|
||||
stat "${TESTFILE}.${x}" >> $seqres.full 2>&1
|
||||
test $? -ne 0 && broken=1
|
||||
touch "${TESTFILE}.${x}" >> $seqres.full 2>&1
|
||||
test $? -ne 0 && broken=1
|
||||
done
|
||||
echo "broken: ${broken}"
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+8
-7
@@ -79,14 +79,15 @@ echo "+ corrupt image"
|
||||
_scratch_xfs_db -x -c "inode ${inode}" -c "addr u.bmbt.ptrs[1]" -c "addr u3.bmbt.ptrs[1]" -c "stack" -c "blocktrash -x 32 -y $((blksz * 8)) -z ${FUZZ_ARGS}" >> $seqres.full
|
||||
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify files"
|
||||
before="$(stat -c '%b' "${SCRATCH_MNT}/bigfile")"
|
||||
$XFS_IO_PROG -f -c "pwrite -S 0x62 ${blksz} ${blksz}" -c 'fsync' "${SCRATCH_MNT}/bigfile" >> $seqres.full 2> /dev/null
|
||||
after="$(stat -c '%b' "${SCRATCH_MNT}/bigfile")"
|
||||
test "${before}" -eq "${after}" || _fail "pwrite should fail on corrupt bmbt"
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify files"
|
||||
before="$(stat -c '%b' "${SCRATCH_MNT}/bigfile")"
|
||||
$XFS_IO_PROG -f -c "pwrite -S 0x62 ${blksz} ${blksz}" -c 'fsync' "${SCRATCH_MNT}/bigfile" >> $seqres.full 2> /dev/null
|
||||
after="$(stat -c '%b' "${SCRATCH_MNT}/bigfile")"
|
||||
test "${before}" -eq "${after}" || _fail "pwrite should fail on corrupt bmbt"
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+4
-3
@@ -78,9 +78,10 @@ echo "+ corrupt image"
|
||||
_scratch_xfs_db -x -c "inode ${inode}" -c "dblock 0" -c "stack" -c "blocktrash -x 32 -o 256 -y $((blksz * 8)) -z ${FUZZ_ARGS}" >> $seqres.full
|
||||
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
cat "${SCRATCH_MNT}/long_symlink" 2>/dev/null && _fail "symlink should be broken"
|
||||
umount "${SCRATCH_MNT}"
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
cat "${SCRATCH_MNT}/long_symlink" 2>/dev/null && _fail "symlink should be broken"
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+5
-4
@@ -87,11 +87,12 @@ echo "+ corrupt xattr"
|
||||
_scratch_xfs_db -x -c "inode ${inode}" -c 'ablock 0' -c "stack" -c "blocktrash -x 32 -y $((blksz * 8)) -z ${FUZZ_ARGS}" >> $seqres.full
|
||||
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify xattr"
|
||||
setfattr -x "user.x00000000" "${SCRATCH_MNT}/attrfile" 2> /dev/null && _fail "modified corrupt xattr"
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify xattr"
|
||||
setfattr -x "user.x00000000" "${SCRATCH_MNT}/attrfile" 2> /dev/null && _fail "modified corrupt xattr"
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+5
-4
@@ -87,11 +87,12 @@ echo "+ corrupt xattr"
|
||||
_scratch_xfs_db -x -c "inode ${inode}" -c 'ablock 0' -c "stack" -c "blocktrash -x 32 -o +32 -y $((blksz * 8)) -z ${FUZZ_ARGS}" >> $seqres.full
|
||||
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify xattr"
|
||||
setfattr -x "user.x00000000" "${SCRATCH_MNT}/attrfile" 2> /dev/null && _fail "modified corrupt xattr"
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify xattr"
|
||||
setfattr -x "user.x00000000" "${SCRATCH_MNT}/attrfile" 2> /dev/null && _fail "modified corrupt xattr"
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
+5
-4
@@ -92,11 +92,12 @@ while true; do
|
||||
done
|
||||
|
||||
echo "+ mount image"
|
||||
_scratch_mount
|
||||
if _try_scratch_mount >> $seqres.full 2>&1; then
|
||||
|
||||
echo "+ modify xattr"
|
||||
setfattr -x "user.x00000000" "${SCRATCH_MNT}/attrfile" 2> /dev/null && _fail "modified corrupt xattr"
|
||||
umount "${SCRATCH_MNT}"
|
||||
echo "+ modify xattr"
|
||||
setfattr -x "user.x00000000" "${SCRATCH_MNT}/attrfile" 2> /dev/null && _fail "modified corrupt xattr"
|
||||
umount "${SCRATCH_MNT}"
|
||||
fi
|
||||
|
||||
echo "+ repair fs"
|
||||
_scratch_xfs_repair >> $seqres.full 2>&1
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user