Test leaf dir allocting new block when bestfree array size less than data blocks count, which may lead to UAF. Signed-off-by: Guo Xuenan <guoxuenan@xxxxxxxxxx> --- tests/xfs/554 | 48 +++++++++++++++++++++++++++++++++++++++++++++++ tests/xfs/554.out | 6 ++++++ 2 files changed, 54 insertions(+) create mode 100755 tests/xfs/554 create mode 100644 tests/xfs/554.out diff --git a/tests/xfs/554 b/tests/xfs/554 new file mode 100755 index 00000000..fcf45731 --- /dev/null +++ b/tests/xfs/554 @@ -0,0 +1,48 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2022 Huawei Limited. All Rights Reserved. +# +# FS QA Test No. 554 +# +# Test leaf dir bestfree array size match with dir disk size +# +. ./common/preamble +_begin_fstest auto quick + +# Import common functions. +. ./common/populate + +# real QA test starts here +_supported_fs xfs +_require_scratch +_require_check_dmesg + +echo "Format and mount" +_scratch_mkfs > $seqres.full 2>&1 +_scratch_mount >> $seqres.full 2>&1 + +echo "Create and check leaf dir" +blksz="$(stat -f -c '%s' "${SCRATCH_MNT}")" +dblksz="$($XFS_INFO_PROG "${SCRATCH_DEV}" | grep naming.*bsize | sed -e 's/^.*bsize=//g' -e 's/\([0-9]*\).*$/\1/g')" +leaf_lblk="$((32 * 1073741824 / blksz))" +node_lblk="$((64 * 1073741824 / blksz))" +__populate_create_dir "${SCRATCH_MNT}/S_IFDIR.FMT_LEAF" "$((dblksz / 12))" +leaf_dir="$(__populate_find_inode "${SCRATCH_MNT}/S_IFDIR.FMT_LEAF")" +_scratch_unmount +__populate_check_xfs_dir "${leaf_dir}" "leaf" + +echo "Inject bad bestfress array size" +_scratch_xfs_db -x -c "inode ${leaf_dir}" -c "dblock 8388608" -c "write ltail.bestcount 0" + +echo "Test add entry to dir" +_scratch_mount +touch ${SCRATCH_MNT}/S_IFDIR.FMT_LEAF/{1..100}.txt > /dev/null 2>&1 +_scratch_unmount 2>&1 +_repair_scratch_fs >> $seqres.full 2>&1 + +# check demsg error +_check_dmesg + +# success, all done +status=0 +exit diff --git a/tests/xfs/554.out b/tests/xfs/554.out new file mode 100644 index 00000000..ea1f30cc --- /dev/null +++ b/tests/xfs/554.out @@ -0,0 +1,6 @@ +QA output created by 554 +Format and mount +Create and check leaf dir +Inject bad bestfress array size +ltail.bestcount = 0 +Test add entry to dir -- 2.25.1