From patchwork Thu Dec 28 01:36:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhihao Cheng X-Patchwork-Id: 1880641 X-Patchwork-Delegate: david.oberhollenzer@sigma-star.at Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=P+f00m6c; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4T0rf66YgHz23dk for ; Thu, 28 Dec 2023 12:34:37 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=TgqNdU0wGfozV6sAr2vHw9AEQaeUGaPamYouj4j4Ut0=; b=P+f00m6ctwUN/8 2xolz0TwIL7dfSoF0TCoKb4uu8U1l/iS5dhlqYTvdexuh60sCjiujTrjIk8Nul8rrAMlSDIfRVHZk ozugWfhpT28jrV36TO6h5b5AbdgBE7BoMLJv6kDpEkPZMdlTAMFm2LmOhJalBLrTO1AB/RBfXdySz yEiNoj998VEJFXgXyu+r+V0YhmYJt1V1MeFSBujm3iLfnUjlj2QmlKUVCFaBNIiUtespBPZPtJ7O1 OUkyH6gXML2PfY1TAvueE4kHyKFOhnmhCC2kvdjBI3oEy53qMKFw3HEz/7XvGoEsNcWVaNOPVlBHU Eef6Q4JHrJP9xC57jCag==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rIfHZ-00Fo3d-0J; Thu, 28 Dec 2023 01:33:57 +0000 Received: from szxga04-in.huawei.com ([45.249.212.190]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rIfHQ-00Fnzm-0E for linux-mtd@lists.infradead.org; Thu, 28 Dec 2023 01:33:52 +0000 Received: from mail.maildlp.com (unknown [172.19.163.44]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4T0rbK2BGFz29dNf; Thu, 28 Dec 2023 09:32:13 +0800 (CST) Received: from kwepemm000013.china.huawei.com (unknown [7.193.23.81]) by mail.maildlp.com (Postfix) with ESMTPS id 82ABD140120; Thu, 28 Dec 2023 09:33:33 +0800 (CST) Received: from huawei.com (10.175.127.227) by kwepemm000013.china.huawei.com (7.193.23.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 28 Dec 2023 09:33:32 +0800 From: Zhihao Cheng To: , , , , CC: , Subject: [PATCH mtd-utils 01/11] tests: Add common libs for ubifs_repair test Date: Thu, 28 Dec 2023 09:36:29 +0800 Message-ID: <20231228013639.2827205-2-chengzhihao1@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20231228013639.2827205-1-chengzhihao1@huawei.com> References: <20231228013639.2827205-1-chengzhihao1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To kwepemm000013.china.huawei.com (7.193.23.81) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231227_173348_504416_1D249511 X-CRM114-Status: GOOD ( 17.93 ) X-Spam-Score: -2.3 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: This is a preparation for adding ubifs_repair testcases. Add some common functions, for example: powercut, load_mtdram, mount_ubifs, encryption operations, etc. Signed-off-by: Zhihao Cheng --- .gitignore | 1 + Makefile.am | 1 + configure.ac | 3 +- tests/ubifs_repair-tests/Makemodule.am | 2 + tests/ubifs_repair-tests/lib/common.sh.in [...] Content analysis details: (-2.3 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [45.249.212.190 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 RCVD_IN_MSPIKE_H4 RBL: Very Good reputation (+4) [45.249.212.190 listed in wl.mailspike.net] 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org This is a preparation for adding ubifs_repair testcases. Add some common functions, for example: powercut, load_mtdram, mount_ubifs, encryption operations, etc. Signed-off-by: Zhihao Cheng --- .gitignore | 1 + Makefile.am | 1 + configure.ac | 3 +- tests/ubifs_repair-tests/Makemodule.am | 2 + tests/ubifs_repair-tests/lib/common.sh.in | 347 ++++++++++++++++++++++++++++++ 5 files changed, 353 insertions(+), 1 deletion(-) create mode 100644 tests/ubifs_repair-tests/Makemodule.am create mode 100755 tests/ubifs_repair-tests/lib/common.sh.in diff --git a/.gitignore b/.gitignore index 8c51ee5..c811883 100644 --- a/.gitignore +++ b/.gitignore @@ -112,6 +112,7 @@ tests/fs-tests/stress/fs_stress00.sh tests/fs-tests/stress/fs_stress01.sh tests/ubi-tests/runubitests.sh tests/ubi-tests/ubi-stress-test.sh +tests/ubifs_repair-tests/lib/common.sh # # Files generated by autotools diff --git a/Makefile.am b/Makefile.am index dd14d96..1454233 100644 --- a/Makefile.am +++ b/Makefile.am @@ -63,6 +63,7 @@ include tests/jittertest/Makemodule.am include tests/checkfs/Makemodule.am include tests/fs-tests/Makemodule.am include tests/mtd-tests/Makemodule.am +include tests/ubifs_repair-tests/Makemodule.am endif if UNIT_TESTS diff --git a/configure.ac b/configure.ac index cd48bb0..d3d3589 100644 --- a/configure.ac +++ b/configure.ac @@ -354,6 +354,7 @@ AC_CONFIG_FILES([tests/fs-tests/fs_help_all.sh tests/fs-tests/stress/fs_stress00.sh tests/fs-tests/stress/fs_stress01.sh tests/ubi-tests/runubitests.sh - tests/ubi-tests/ubi-stress-test.sh]) + tests/ubi-tests/ubi-stress-test.sh + tests/ubifs_repair-tests/lib/common.sh]) AC_OUTPUT([Makefile]) diff --git a/tests/ubifs_repair-tests/Makemodule.am b/tests/ubifs_repair-tests/Makemodule.am new file mode 100644 index 0000000..caa503d --- /dev/null +++ b/tests/ubifs_repair-tests/Makemodule.am @@ -0,0 +1,2 @@ +test_SCRIPTS += \ + tests/ubifs_repair-tests/lib/common.sh diff --git a/tests/ubifs_repair-tests/lib/common.sh.in b/tests/ubifs_repair-tests/lib/common.sh.in new file mode 100755 index 0000000..656b609 --- /dev/null +++ b/tests/ubifs_repair-tests/lib/common.sh.in @@ -0,0 +1,347 @@ +#!/bin/sh +# Copyright (c), 2023-2024, Huawei Technologies Co, Ltd. +# Author: Zhihao Cheng +# +# Provide basic functions. +# Notice, all loaded modules(mtdram/nandsim/ubi/ubifs) won't be removed +# if errors occur, it is useful to debug on problem ubifs image. + +UBI_NUM=0 +DEV=/dev/ubi0_0 +MNT=/mnt/test_file_system +TMP_FILE=/tmp/ubi_test_file +KEY_FILE=/tmp/key +nandsim_patt="NAND simulator" +mtdram_patt="mtdram test device" + +function fatal() +{ + echo "Error: $1" 1>&2 + exit 1 +} + +function cleanup_handler() +{ + local ret="$1" + + # Below is magic to exit with correct exit code + if [ "$ret" == "0" ]; then + umount $MNT >/dev/null 2>&1 ||: + modprobe -r ubifs >/dev/null 2>&1 ||: + modprobe -r ubi >/dev/null 2>&1 ||: + modprobe -r nandsim >/dev/null 2>&1 ||: + modprobe -r mtdram >/dev/null 2>&1 ||: + exit 0 + else + exit 1 + fi +} +trap 'cleanup_handler $?' EXIT +trap 'cleanup_handler 1' HUP PIPE INT QUIT TERM + +function find_mtd_device() +{ + printf "%s" "$(grep "$1" /proc/mtd | sed -e "s/^mtd\([0-9]\+\):.*$/\1/")" +} + +function powercut() +{ + dmesg -c > /dev/null + echo 1 > /sys/kernel/debug/ubifs/tst_recovery; + while true; + do + msg=`dmesg -c | grep "Power cut emulated"`; + if [[ "$msg" != "" ]]; + then + break; + fi + done + echo 0 > /sys/kernel/debug/ubifs/tst_recovery +} + +# Load mtdram with specified size and PEB size +# Usage: load_mtdram +# 1. Flash size is specified in MiB +# 2. PEB size is specified in KiB +function load_mtdram() +{ + local size="$1"; shift + local peb_size="$1"; shift + + size="$(($size * 1024))" + modprobe mtdram total_size="$size" erase_size="$peb_size" +} + +function check_fsstress() +{ + cmd=`fsstress | grep "op_name"` + if ! [[ "$cmd" =~ "op_name" ]]; then + fatal "fsstress is not found" + fi +} + +# Check error messages +function check_err_msg() +{ + msg=`dmesg | grep -E "dump_stack|UBIFS error|switched to read-only mode"`; + if [[ "$msg" != "" ]] + then + dmesg + fatal "error message detected!" + fi + dmesg -c > /dev/null +} + +# Check memleak +function check_memleak() +{ + # CONFIG_DEBUG_KMEMLEAK=y + if ! [ -f /sys/kernel/debug/kmemleak ]; then + echo "kmemleak is not enabled, skip checking" + return; + fi + + echo scan > /sys/kernel/debug/kmemleak + memleak=`cat /sys/kernel/debug/kmemleak` + if [[ "$memleak" != "" ]]; then + echo $memleak + fatal "kmemleak detected!" + fi +} + +# Iterate all files under certain dir +# $1: dir +# $2: "md5sum" means that need record md5 for regular file, otherwise don't record md5 for regular file +function read_dir() { + for file in `ls -a $1` + do + cur_f=$1"/"$file + if [ -b $cur_f ] + then + major=`stat -c %t $cur_f` + minor=`stat -c %T $cur_f` + echo "block $cur_f $major $minor" >> $TMP_FILE + elif [ -c $cur_f ] + then + major=`stat -c %t $cur_f` + minor=`stat -c %T $cur_f` + echo "char $cur_f $major $minor" >> $TMP_FILE + elif [ -L $cur_f ] + then + link=`stat -c %N $cur_f` + echo "symlink $cur_f $link" >> $TMP_FILE + elif [ -S $cur_f ] + then + echo "sock $cur_f" >> $TMP_FILE + elif [ -p $cur_f ] + then + echo "fifo $cur_f" >> $TMP_FILE + elif [ -f $cur_f ] + then + sz=`stat -c %s $cur_f` + if [[ "$2" != "md5sum" ]]; then + echo "reg $cur_f $sz" >> $TMP_FILE + else + md5=`md5sum $cur_f | awk '{print $1}'` + echo "reg $cur_f $md5 $sz" >> $TMP_FILE + fi + elif [ -d $cur_f ] + then + if [[ $file != '.' && $file != '..' ]] + then + echo "dir $cur_f" >> $TMP_FILE + read_dir $1"/"$file $2 + fi + else + fatal "record unknown file type $cur_f" + fi + done +} + +# Check whether there are files lost after repairing UBIFS +# $1: "md5sum" means need record md5 for regular file, otherwise don't record md5 for regular file +function parse_dir() +{ + while read line + do + array=(${line//\ / }); + f_type=${array[0]}; + cur_f=${array[1]}; + cur_info="" + if [[ "$f_type" =~ "block" ]] + then + major=`stat -c %t $cur_f` + minor=`stat -c %T $cur_f` + cur_info="block $cur_f $major $minor" + elif [[ "$f_type" =~ "char" ]] + then + major=`stat -c %t $cur_f` + minor=`stat -c %T $cur_f` + cur_info="char $cur_f $major $minor" + elif [[ "$f_type" =~ "symlink" ]] + then + link=`stat -c %N $cur_f` + cur_info="symlink $cur_f $link" + elif [[ "$f_type" =~ "sock" ]] + then + cur_info="sock $cur_f" + elif [[ "$f_type" =~ "fifo" ]] + then + cur_info="fifo $cur_f" + elif [[ "$f_type" =~ "reg" ]] + then + sz=`stat -c %s $cur_f` + if [[ "$1" != "md5sum" ]]; then + cur_info="reg $cur_f $sz" + else + md5=`md5sum $cur_f | awk '{print $1}'` + cur_info="reg $cur_f $md5 $sz" + fi + elif [[ "$f_type" =~ "dir" ]] + then + cur_info="dir $cur_f" + else + fatal "parse unknown file type $cur_f" + fi + if [[ "$cur_info" != "$line" ]] + then + fatal "current info $cur_info, but expect $line" + fi + done < $TMP_FILE +} + +function authentication() +{ + keyctl clear @s + res=$? + if [[ $res != 0 ]]; then + fatal "keyctl is not found" + fi + keyctl add logon ubifs:foo 12345678901234567890123456789012 @s +} + +function encryption_gen_key() +{ + # CONFIG_FS_ENCRYPTION=y + head -c 64 /dev/urandom > $KEY_FILE + cmd=`fscryptctl -h | grep "set_policy"` + if ! [[ "$cmd" =~ "set_policy" ]]; then + fatal "fscryptctl is not found" + fi +} + +function encryption_set_key() +{ + mnt=$1 + # https://github.com/google/fscryptctl + key=$(fscryptctl add_key $mnt < $KEY_FILE) + fscryptctl set_policy $key $mnt + #fscryptctl get_policy $mnt + ret=$? + if [[ $ret != 0 ]]; then + fatal "set encryption policy failed" + fi +} + +function mount_ubifs() +{ + dev=$1 + mnt=$2 + auth=$3 + if [[ "$auth" == "authentication" ]]; then + authentication + mount -t ubifs -o auth_key=ubifs:foo,auth_hash_name=sha256 $dev $mnt + else + mount -t ubifs $dev $mnt + fi +} + +function enable_chkfs() +{ + echo 1 > /sys/kernel/debug/ubifs/chk_fs + echo 1 > /sys/kernel/debug/ubifs/chk_general + echo 1 > /sys/kernel/debug/ubifs/chk_index + echo 1 > /sys/kernel/debug/ubifs/chk_lprops + echo 1 > /sys/kernel/debug/ubifs/chk_orphans +} + +function disable_chkfs() +{ + echo 0 > /sys/kernel/debug/ubifs/chk_fs + echo 0 > /sys/kernel/debug/ubifs/chk_general + echo 0 > /sys/kernel/debug/ubifs/chk_index + echo 0 > /sys/kernel/debug/ubifs/chk_lprops + echo 0 > /sys/kernel/debug/ubifs/chk_orphans +} + +function inject_mem_err() +{ + # CONFIG_FAILSLAB=y + # CONFIG_FAIL_PAGE_ALLOC=y + local pid=$1; + + if ! [ -f /sys/kernel/debug/failslab/probability ]; then + fatal "failslab is not enabled, injection failed" + fi + if ! [ -f /sys/kernel/debug/fail_page_alloc/probability ]; then + fatal "fail_page_alloc is not enabled, injection failed" + fi + + echo 1 > /proc/$pid/make-it-fail + + echo Y > /sys/kernel/debug/failslab/task-filter + echo 1 > /sys/kernel/debug/failslab/probability # 1% failure + echo 10000 > /sys/kernel/debug/failslab/times + echo 1 > /sys/kernel/debug/failslab/verbose + echo N > /sys/kernel/debug/failslab/ignore-gfp-wait + + echo Y > /sys/kernel/debug/fail_page_alloc/task-filter + echo 1 > /sys/kernel/debug/fail_page_alloc/probability + echo 10000 > /sys/kernel/debug/fail_page_alloc/times + echo 0 > /sys/kernel/debug/fail_page_alloc/verbose + echo N > /sys/kernel/debug/fail_page_alloc/ignore-gfp-wait +} + +function cancel_mem_err() +{ + echo 0 > /sys/kernel/debug/failslab/probability + echo 0 > /sys/kernel/debug/failslab/times + echo 0 > /sys/kernel/debug/failslab/verbose + echo N > /sys/kernel/debug/failslab/task-filter + echo Y > /sys/kernel/debug/failslab/ignore-gfp-wait + + echo 0 > /sys/kernel/debug/fail_page_alloc/probability + echo 0 > /sys/kernel/debug/fail_page_alloc/times + echo 1 > /sys/kernel/debug/fail_page_alloc/verbose + echo N > /sys/kernel/debug/fail_page_alloc/task-filter + echo Y > /sys/kernel/debug/fail_page_alloc/ignore-gfp-wait +} + +function inject_io_err() +{ + if ! [ -f /sys/kernel/debug/ubi/ubi$UBI_NUM/tst_emulate_io_failures ]; then + fatal "tst_emulate_io_failures is not enabled, skip injection" + fi + + echo 1 > /sys/kernel/debug/ubi/ubi$UBI_NUM/tst_emulate_io_failures +} + +function cancel_io_err() +{ + echo 0 > /sys/kernel/debug/ubi/ubi$UBI_NUM/tst_emulate_io_failures +} + +sysctl -w kernel.panic_on_warn=1 +sysctl -w kernel.panic_on_oops=1 + +if ! [ -d $MNT ]; then + mkdir -p $MNT +fi + +modprobe ubi || fatal "common.sh: cannot load ubi" +modprobe ubifs || fatal "common.sh: cannot load ubifs" +if ! [ -f /sys/kernel/debug/ubifs/repair_fs ]; then + fatal "common.sh: ubifs_repair is not supported" +fi +modprobe -r ubifs +modprobe -r ubi From patchwork Thu Dec 28 01:36:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhihao Cheng X-Patchwork-Id: 1880639 X-Patchwork-Delegate: david.oberhollenzer@sigma-star.at Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=JRAGncXe; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4T0rf66W8rz23dj for ; Thu, 28 Dec 2023 12:34:37 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=7scbyBHt38Ie/uPJSHVf/YFB1Cju6nkzKSp7hpCkaY8=; b=JRAGncXe+ocEoz xpskQBSaF0YKFKWOdSo82SZcZ/MRZk3/QouvuoV3NLaPRFnZcNectHjPNBmLCwdVbvh7BBf4Qd2BG sB9tBy60vz+dEEuc9w9tHhJkWW4XfjzTV/fvbxiCYpsMz0nbmxmWLNgOPjPjvF+H9OCOhApDzOsxF 3T2YGCqvZEatY0kvvh9Kknz69lerXWOOIKB1u+eQOdWHcxHO8ArmwcgJRC3W0ZmmOx5W4GcYSca6t xbqQraxYHsfj8kllVf+is8jGRe0utSVD/1LGzH09VUx7ReTzCi7SiprIRvpUqUKo7Qp0ND0sITtiW pkB3e4QkBLe8H9fk9U1w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rIfHT-00Fo26-2n; Thu, 28 Dec 2023 01:33:51 +0000 Received: from szxga03-in.huawei.com ([45.249.212.189]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rIfHQ-00Fnzq-0I for linux-mtd@lists.infradead.org; Thu, 28 Dec 2023 01:33:50 +0000 Received: from mail.maildlp.com (unknown [172.19.163.252]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4T0rcQ6SDTzMprQ; Thu, 28 Dec 2023 09:33:10 +0800 (CST) Received: from kwepemm000013.china.huawei.com (unknown [7.193.23.81]) by mail.maildlp.com (Postfix) with ESMTPS id 27DF6180075; Thu, 28 Dec 2023 09:33:34 +0800 (CST) Received: from huawei.com (10.175.127.227) by kwepemm000013.china.huawei.com (7.193.23.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 28 Dec 2023 09:33:33 +0800 From: Zhihao Cheng To: , , , , CC: , Subject: [PATCH mtd-utils 02/11] tests: ubifs_repair: Add authentication refusing test Date: Thu, 28 Dec 2023 09:36:30 +0800 Message-ID: <20231228013639.2827205-3-chengzhihao1@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20231228013639.2827205-1-chengzhihao1@huawei.com> References: <20231228013639.2827205-1-chengzhihao1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To kwepemm000013.china.huawei.com (7.193.23.81) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231227_173348_455503_D9EA6E4D X-CRM114-Status: GOOD ( 12.51 ) X-Spam-Score: -2.3 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Authenticated UBIFS image is not support for UBIFS repair, add testcase to check that. Signed-off-by: Zhihao Cheng --- .gitignore | 1 + configure.ac | 3 +- tests/ubifs_repair-tests/Makemodule.am | 3 +- .../tests/authentication_refuse.sh.in | 69 ++++++++++++++++ [...] Content analysis details: (-2.3 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [45.249.212.189 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 RCVD_IN_MSPIKE_H5 RBL: Excellent reputation (+5) [45.249.212.189 listed in wl.mailspike.net] 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Authenticated UBIFS image is not support for UBIFS repair, add testcase to check that. Signed-off-by: Zhihao Cheng --- .gitignore | 1 + configure.ac | 3 +- tests/ubifs_repair-tests/Makemodule.am | 3 +- .../tests/authentication_refuse.sh.in | 69 ++++++++++++++++++++++ 4 files changed, 74 insertions(+), 2 deletions(-) create mode 100755 tests/ubifs_repair-tests/tests/authentication_refuse.sh.in diff --git a/.gitignore b/.gitignore index c811883..7613349 100644 --- a/.gitignore +++ b/.gitignore @@ -113,6 +113,7 @@ tests/fs-tests/stress/fs_stress01.sh tests/ubi-tests/runubitests.sh tests/ubi-tests/ubi-stress-test.sh tests/ubifs_repair-tests/lib/common.sh +tests/ubifs_repair-tests/tests/authentication_refuse.sh # # Files generated by autotools diff --git a/configure.ac b/configure.ac index d3d3589..a42a55d 100644 --- a/configure.ac +++ b/configure.ac @@ -355,6 +355,7 @@ AC_CONFIG_FILES([tests/fs-tests/fs_help_all.sh tests/fs-tests/stress/fs_stress01.sh tests/ubi-tests/runubitests.sh tests/ubi-tests/ubi-stress-test.sh - tests/ubifs_repair-tests/lib/common.sh]) + tests/ubifs_repair-tests/lib/common.sh + tests/ubifs_repair-tests/tests/authentication_refuse.sh]) AC_OUTPUT([Makefile]) diff --git a/tests/ubifs_repair-tests/Makemodule.am b/tests/ubifs_repair-tests/Makemodule.am index caa503d..c0a6ea1 100644 --- a/tests/ubifs_repair-tests/Makemodule.am +++ b/tests/ubifs_repair-tests/Makemodule.am @@ -1,2 +1,3 @@ test_SCRIPTS += \ - tests/ubifs_repair-tests/lib/common.sh + tests/ubifs_repair-tests/lib/common.sh \ + tests/ubifs_repair-tests/tests/authentication_refuse.sh diff --git a/tests/ubifs_repair-tests/tests/authentication_refuse.sh.in b/tests/ubifs_repair-tests/tests/authentication_refuse.sh.in new file mode 100755 index 0000000..b322121 --- /dev/null +++ b/tests/ubifs_repair-tests/tests/authentication_refuse.sh.in @@ -0,0 +1,69 @@ +#!/bin/sh +# Copyright (c), 2023-2024, Huawei Technologies Co, Ltd. +# Author: Zhihao Cheng +# +# Test Description: +# Refuse repairing authenticated UBIFS image +# Running time: 10s + +TESTBINDIR=@TESTBINDIR@ +source $TESTBINDIR/common.sh + +ID="0xec,0xa1,0x00,0x15" # 128M 128KB 2KB 512-sub-page + +function run_test() +{ + echo "Do authentication_refused test" + + modprobe nandsim id_bytes=$ID + mtdnum="$(find_mtd_device "$nandsim_patt")" + flash_eraseall /dev/mtd$mtdnum + + modprobe ubi mtd="$mtdnum,2048,0,0,1" fm_autoconvert || fatal "modprobe ubi fail" + ubimkvol -N vol_test -m -n 0 /dev/ubi$UBI_NUM || fatal "mkvol fail" + modprobe ubifs || fatal "modprobe ubifs fail" + + mount_ubifs $DEV $MNT "authentication" || fatal "mount ubifs failed" + fsstress -d $MNT/fsstress -l0 -p4 -n10000 & + sleep $((RANDOM % 5)) + + ps -e | grep -w fsstress > /dev/null 2>&1 + while [ $? -eq 0 ] + do + killall -9 fsstress > /dev/null 2>&1 + sleep 1 + ps -e | grep -w fsstress > /dev/null 2>&1 + done + + while true + do + res=`mount | grep "$MNT"` + if [[ "$res" == "" ]] + then + break; + fi + umount $MNT + sleep 0.1 + done + + echo 'format "UBIFS DBG repair" +pflmt' > /sys/kernel/debug/dynamic_debug/control + echo "$DEV" > /sys/kernel/debug/ubifs/repair_fs + res=$? + if [[ $res == 0 ]] + then + fatal "repair should not be success!" + fi + + check_memleak + + modprobe -r ubifs + modprobe -r ubi + modprobe -r nandsim +} + +start_t=$(date +%s) +run_test +end_t=$(date +%s) +time_cost=$(( end_t - start_t )) +echo "Success, cost $time_cost seconds" +exit 0 From patchwork Thu Dec 28 01:36:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhihao Cheng X-Patchwork-Id: 1880640 X-Patchwork-Delegate: david.oberhollenzer@sigma-star.at Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=lMZo3sVY; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4T0rf70dYpz23dp for ; Thu, 28 Dec 2023 12:34:37 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=CICmtgJ6x+UYjtZ0ZoMNdjtKPCdjazlopk0mKoHsNsM=; b=lMZo3sVYeFVlMg Sw/kahzxYwULDMTScLcyH+xB5XTmYZX/YrTOdYiGJJTAnXuVDrEzJH4qNFhMZgzdPwo9hDLxBzMEK IEQqEMG3lhxHUzPi7/hrwNpO/pi7gb2LFhf9FpCTs0KSFOxR5r2bOVKss/xwF5S8Cpj2N+ehSiAfC nuXMcacYRSqMywzx01CvGB6IabNYHmQwQnCavHFPK50N+OkGqffbFcKN+NIK2YPiKwtiizhptPe6Y vF6Qe6nXkMvwg2Z8Egk7wbYlQ49Se0m3iFZR3QE9yOoYA9MYq5/7TOXqFwF1OU/MUxNHX3VRBm/73 3mSNh7LK+bLuOOV+JzOg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rIfHV-00Fo2j-1X; Thu, 28 Dec 2023 01:33:53 +0000 Received: from szxga05-in.huawei.com ([45.249.212.191]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rIfHQ-00Fnzr-07 for linux-mtd@lists.infradead.org; Thu, 28 Dec 2023 01:33:50 +0000 Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4T0rXQ6MYxz1FFnD; Thu, 28 Dec 2023 09:29:42 +0800 (CST) Received: from kwepemm000013.china.huawei.com (unknown [7.193.23.81]) by mail.maildlp.com (Postfix) with ESMTPS id C994B1A0173; Thu, 28 Dec 2023 09:33:34 +0800 (CST) Received: from huawei.com (10.175.127.227) by kwepemm000013.china.huawei.com (7.193.23.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 28 Dec 2023 09:33:34 +0800 From: Zhihao Cheng To: , , , , CC: , Subject: [PATCH mtd-utils 03/11] tests: ubifs_repair: Add cycle mount+repair test Date: Thu, 28 Dec 2023 09:36:31 +0800 Message-ID: <20231228013639.2827205-4-chengzhihao1@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20231228013639.2827205-1-chengzhihao1@huawei.com> References: <20231228013639.2827205-1-chengzhihao1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To kwepemm000013.china.huawei.com (7.193.23.81) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231227_173348_446404_9D8B87F3 X-CRM114-Status: GOOD ( 17.28 ) X-Spam-Score: -2.3 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Do fsstress and repair ubifs image, make sure all files(and their data) are not lost after repairing. This testcase mainly checks whether ubifs_repair could corrupt filesystem content in common case. Content analysis details: (-2.3 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [45.249.212.191 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 RCVD_IN_MSPIKE_H5 RBL: Excellent reputation (+5) [45.249.212.191 listed in wl.mailspike.net] 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Do fsstress and repair ubifs image, make sure all files(and their data) are not lost after repairing. This testcase mainly checks whether ubifs_repair could corrupt filesystem content in common case. Signed-off-by: Zhihao Cheng --- .gitignore | 1 + configure.ac | 3 +- tests/ubifs_repair-tests/Makemodule.am | 3 +- .../tests/cycle_mount_repair_check.sh.in | 177 +++++++++++++++++++++ 4 files changed, 182 insertions(+), 2 deletions(-) create mode 100755 tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh.in diff --git a/.gitignore b/.gitignore index 7613349..1a5fe7e 100644 --- a/.gitignore +++ b/.gitignore @@ -114,6 +114,7 @@ tests/ubi-tests/runubitests.sh tests/ubi-tests/ubi-stress-test.sh tests/ubifs_repair-tests/lib/common.sh tests/ubifs_repair-tests/tests/authentication_refuse.sh +tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh # # Files generated by autotools diff --git a/configure.ac b/configure.ac index a42a55d..73a3853 100644 --- a/configure.ac +++ b/configure.ac @@ -356,6 +356,7 @@ AC_CONFIG_FILES([tests/fs-tests/fs_help_all.sh tests/ubi-tests/runubitests.sh tests/ubi-tests/ubi-stress-test.sh tests/ubifs_repair-tests/lib/common.sh - tests/ubifs_repair-tests/tests/authentication_refuse.sh]) + tests/ubifs_repair-tests/tests/authentication_refuse.sh + tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh]) AC_OUTPUT([Makefile]) diff --git a/tests/ubifs_repair-tests/Makemodule.am b/tests/ubifs_repair-tests/Makemodule.am index c0a6ea1..c2556f5 100644 --- a/tests/ubifs_repair-tests/Makemodule.am +++ b/tests/ubifs_repair-tests/Makemodule.am @@ -1,3 +1,4 @@ test_SCRIPTS += \ tests/ubifs_repair-tests/lib/common.sh \ - tests/ubifs_repair-tests/tests/authentication_refuse.sh + tests/ubifs_repair-tests/tests/authentication_refuse.sh \ + tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh diff --git a/tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh.in b/tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh.in new file mode 100755 index 0000000..1f5db3f --- /dev/null +++ b/tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh.in @@ -0,0 +1,177 @@ +#!/bin/sh +# Copyright (c), 2023-2024, Huawei Technologies Co, Ltd. +# Author: Zhihao Cheng +# +# Test Description: +# Do many cycles of mount/fsstress/umount/repair/mount, check whether filesystem +# content before repairing and after repairing are consistent. +# Running time: 16h + +TESTBINDIR=@TESTBINDIR@ +source $TESTBINDIR/common.sh + +# No need to test on large size flash, it will take very long time iterating +# all files in large filesystem. +ID="0xec,0xa1,0x00,0x15" # 128M 128KB 2KB 512-sub-page + +function run_test() +{ + mode=$1 + encryption=$2 + modprobe nandsim id_bytes=$ID + mtdnum="$(find_mtd_device "$nandsim_patt")" + flash_eraseall /dev/mtd$mtdnum + + dmesg -c > /dev/null + + modprobe ubi mtd="$mtdnum,2048,0,0,1" fm_autoconvert || fatal "modprobe ubi fail" + ubimkvol -N vol_test -m -n 0 /dev/ubi$UBI_NUM || fatal "mkvol fail" + modprobe ubifs || fatal "modprobe ubifs fail" + + echo "Do cycle mount+umount+repair+check_fs_content test ($encryption,$mode)" + + if [[ "$encryption" == "encrypted" ]]; then + encryption_gen_key + fi + + round=0 + while [[ $round -lt 20 ]] + do + echo "---------------------- ROUND $round ----------------------" + let round=$round+1 + + mount_ubifs $DEV $MNT || fatal "mount ubifs fail" + if [[ "$encryption" == "encrypted" ]]; then + encryption_set_key $MNT + fi + + per=`df -Th | grep ubifs | awk '{print $6}'`; + if [[ ${per%?} -gt 95 ]]; then + # Used > 95% + echo "Clean files" + rm -rf $MNT/* + check_err_msg + fi + + # Truncation and writing ops cannot coexist, because ubifs_repair could recover truncated data nodes which leads different md5 results before repairing and after repairing. For example: + # 1. write(file, 8K) + # 2. truncate(file, 0) # data block 0,1 are truncated + # 3. lseek(file, 4K) + # 4. write(file, 4K) # data block 1' is created + # 5. truncate(file, 8000) # data block 1'' is modified + # It is expected that only data block 1'' is found after repairing, but ubifs_repair will try best to recover all nodes(ubifs_repair cannot utilize TNC information), so data block 0 and data block 1'' are found. + if [[ "$mode" == "notruncate" ]] + then + fsstress -d $MNT -l0 -p4 -n10000 -f truncate=0 & + elif [[ "$mode" == "nowrite" ]] + then + fsstress -d $MNT -l0 -p4 -n10000 -f dwrite=0 -f awrite=0 -f write=0 -f writev=0 -f mwrite=0 -f uring_write=0 -f copyrange=0 -f deduperange=0 -f clonerange=0 -f splice=0 & + else + fsstress -d $MNT -l0 -p4 -n10000 & + fi + + sleep $((RANDOM % 30)) + + ps -e | grep -w fsstress > /dev/null 2>&1 + while [ $? -eq 0 ] + do + killall -9 fsstress > /dev/null 2>&1 + sleep 1 + ps -e | grep -w fsstress > /dev/null 2>&1 + done + + check_err_msg # Make sure new operations are okay after repairing UBIFS + sync + + # Record filesystem information + rm -f $TMP_FILE 2>/dev/null + if [[ "$mode" == "all" ]] + then + read_dir $MNT "nomd5sum" + else + read_dir $MNT "md5sum" + fi + + while true + do + res=`mount | grep "$MNT"` + if [[ "$res" == "" ]] + then + break; + fi + umount $MNT + sleep 0.1 + done + + echo 'format "UBIFS DBG repair" +pflmt' > /sys/kernel/debug/dynamic_debug/control + echo "$DEV" > /sys/kernel/debug/ubifs/repair_fs + res=$? + if [[ $res != 0 ]] + then + fatal "repair fail $res" + fi + + # There are no powercut or corruption, error messages won't appear in UBIFS repairing + check_err_msg + + check_memleak + + enable_chkfs + + mount_ubifs $DEV $MNT + res=$? + if [[ $res != 0 ]] + then + fatal "mount fail $res" + fi + + if [[ "$encryption" == "encrypted" ]]; then + encryption_set_key $MNT + fi + + du -sh $MNT > /dev/null # Make sure all files are accessible + ret=$? + if [[ $ret != 0 ]]; then + fatal "Cannot access all files" + fi + check_err_msg + + # Check filesystem information + if [[ "$mode" == "all" ]] + then + parse_dir "nomd5sum" + else + parse_dir "md5sum" + fi + rm -f $TMP_FILE 2>/dev/null + + umount $MNT + res=$? + if [[ $res != 0 ]] + then + fatal "unmount fail $res" + fi + + check_err_msg + + disable_chkfs + done + + modprobe -r ubifs + modprobe -r ubi + modprobe -r nandsim +} + +check_fsstress +start_t=$(date +%s) +for encryption in "encrypted" "noencrypted"; do + # This situation is ignored, fsstress (comes from https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git) could invoke open(O_TRUNC), however there is no 'O_TRUNC' passed into open syscall after looking through the code, so we just skip this case for now. + #run_test "notruncate" $encryption + + run_test "nowrite" $encryption + run_test "all" $encryption +done +end_t=$(date +%s) +time_cost=$(( end_t - start_t )) +echo "Success, cost $time_cost seconds" +exit 0 From patchwork Thu Dec 28 01:36:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhihao Cheng X-Patchwork-Id: 1880642 X-Patchwork-Delegate: david.oberhollenzer@sigma-star.at Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=PZCeAvij; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4T0rf66RgTz23dZ for ; Thu, 28 Dec 2023 12:34:38 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=U1/fgEsG/V8IVkYvnYyfCFbet2U1HLz5iVGgk64uSsI=; b=PZCeAvijxZZzR1 ilCN3TVa/hlJAVWJlB8QCiQHI5XMq+ZAr9hqx8t4w48nlynvIuEpvyCky/frA/FOmkFmWm8EtMc83 PqjN+P1a7PXsHhNB+wJMRcjsMEy12y+I6IWRPqhtTT3PZiOyVUhW3BPxRHc90OxmjMsJkTM03Afcl SecgOZEAhkzpVv107eRGVO8+N0L65F7ppGkDHGg4nb8M+HIRQCZVUSWamwKsne6rCt0xTDLTjHWqQ m4cqpAbnciI6IFuyCVxYpd6VNM2PpV9PJSsn2sp+OpKAgqRomhp9ePP03db63mKSP+3BVNb3H6Mfz kBJOT4h2OUVpM16pjWwQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rIfHW-00Fo30-0A; Thu, 28 Dec 2023 01:33:54 +0000 Received: from szxga05-in.huawei.com ([45.249.212.191]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rIfHQ-00Fnzs-0I for linux-mtd@lists.infradead.org; Thu, 28 Dec 2023 01:33:52 +0000 Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4T0rXR3vnZz1FGHJ; Thu, 28 Dec 2023 09:29:43 +0800 (CST) Received: from kwepemm000013.china.huawei.com (unknown [7.193.23.81]) by mail.maildlp.com (Postfix) with ESMTPS id 764441A0172; Thu, 28 Dec 2023 09:33:35 +0800 (CST) Received: from huawei.com (10.175.127.227) by kwepemm000013.china.huawei.com (7.193.23.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 28 Dec 2023 09:33:34 +0800 From: Zhihao Cheng To: , , , , CC: , Subject: [PATCH mtd-utils 04/11] tests: ubifs_repair: Add powercut+repair+mount test Date: Thu, 28 Dec 2023 09:36:32 +0800 Message-ID: <20231228013639.2827205-5-chengzhihao1@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20231228013639.2827205-1-chengzhihao1@huawei.com> References: <20231228013639.2827205-1-chengzhihao1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To kwepemm000013.china.huawei.com (7.193.23.81) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231227_173348_502157_A783C7F2 X-CRM114-Status: GOOD ( 15.87 ) X-Spam-Score: -2.3 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Inject powercut while doing fsstress on mounted UBIFS for kinds of flashes (eg. nand, nor). This testcase mainly makes sure that ubifs_repair can make UBIFS image be consistent on different flashes (e [...] Content analysis details: (-2.3 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 RCVD_IN_MSPIKE_H5 RBL: Excellent reputation (+5) [45.249.212.191 listed in wl.mailspike.net] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [45.249.212.191 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Inject powercut while doing fsstress on mounted UBIFS for kinds of flashes (eg. nand, nor). This testcase mainly makes sure that ubifs_repair can make UBIFS image be consistent on different flashes (eg. nand, nor). Because the min_io_size of nor flash is 1, the UBIFS image on nor flash will be different from nand flash after doing powercut, so we need make sure ubifs_repair can handle these two types of flash. Signed-off-by: Zhihao Cheng --- .gitignore | 1 + configure.ac | 3 +- tests/ubifs_repair-tests/Makemodule.am | 3 +- .../tests/powercut_repair_mount.sh.in | 138 +++++++++++++++++++++ 4 files changed, 143 insertions(+), 2 deletions(-) create mode 100755 tests/ubifs_repair-tests/tests/powercut_repair_mount.sh.in diff --git a/.gitignore b/.gitignore index 1a5fe7e..d47282c 100644 --- a/.gitignore +++ b/.gitignore @@ -115,6 +115,7 @@ tests/ubi-tests/ubi-stress-test.sh tests/ubifs_repair-tests/lib/common.sh tests/ubifs_repair-tests/tests/authentication_refuse.sh tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh +tests/ubifs_repair-tests/tests/powercut_repair_mount.sh # # Files generated by autotools diff --git a/configure.ac b/configure.ac index 73a3853..349e4ad 100644 --- a/configure.ac +++ b/configure.ac @@ -357,6 +357,7 @@ AC_CONFIG_FILES([tests/fs-tests/fs_help_all.sh tests/ubi-tests/ubi-stress-test.sh tests/ubifs_repair-tests/lib/common.sh tests/ubifs_repair-tests/tests/authentication_refuse.sh - tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh]) + tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh + tests/ubifs_repair-tests/tests/powercut_repair_mount.sh]) AC_OUTPUT([Makefile]) diff --git a/tests/ubifs_repair-tests/Makemodule.am b/tests/ubifs_repair-tests/Makemodule.am index c2556f5..92f288a 100644 --- a/tests/ubifs_repair-tests/Makemodule.am +++ b/tests/ubifs_repair-tests/Makemodule.am @@ -1,4 +1,5 @@ test_SCRIPTS += \ tests/ubifs_repair-tests/lib/common.sh \ tests/ubifs_repair-tests/tests/authentication_refuse.sh \ - tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh + tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh \ + tests/ubifs_repair-tests/tests/powercut_repair_mount.sh diff --git a/tests/ubifs_repair-tests/tests/powercut_repair_mount.sh.in b/tests/ubifs_repair-tests/tests/powercut_repair_mount.sh.in new file mode 100755 index 0000000..a5c7da6 --- /dev/null +++ b/tests/ubifs_repair-tests/tests/powercut_repair_mount.sh.in @@ -0,0 +1,138 @@ +#!/bin/sh +# Copyright (c), 2023-2024, Huawei Technologies Co, Ltd. +# Author: Zhihao Cheng +# +# Test Description: +# For many kinds of flash, do following things +# 1. mount UBIFS +# 2. fsstress & powercut & unmount +# 3. repair ubifs +# 4. check UBIFS mounting result +# Running time: 1h + +TESTBINDIR=@TESTBINDIR@ +source $TESTBINDIR/common.sh + +function run_test() +{ + local simulator="$1"; + local size="$2"; + local peb_size="$3"; + local page_size="$4"; + local encryption=$5; + + echo "======================================================================" + printf "%s" "$simulator: ${size}MiB PEB size ${peb_size}KiB" + if [ "$simulator" = "nandsim" ]; then + printf " %s" "page size ${page_size}KiB" + fi + printf " $encryption\n" + + if [ "$simulator" = "nandsim" ]; then + $TESTBINDIR/load_nandsim.sh "$size" "$peb_size" "$page_size" || echo "cannot load nandsim"; + mtdnum="$(find_mtd_device "$nandsim_patt")" + elif [ "$simulator" = "mtdram" ]; then + load_mtdram "$size" "$peb_size" || echo "cannot load mtdram" + mtdnum="$(find_mtd_device "$mtdram_patt")" + else + fatal "$simulator is not supported" + fi + + flash_eraseall /dev/mtd$mtdnum + modprobe ubi mtd="$mtdnum,$page_size,0,0,1" fm_autoconvert || fatal "modprobe ubi fail" + ubimkvol -N vol_test -m -n 0 /dev/ubi$UBI_NUM || fatal "mkvol fail" + modprobe ubifs || fatal "modprobe ubifs fail" + mount_ubifs $DEV $MNT || fatal "mount ubifs fail" + if [[ "$encryption" == "encrypted" ]]; then + encryption_gen_key + encryption_set_key $MNT + fi + + fsstress -d $MNT -l0 -p4 -n10000 & + sleep $((RANDOM % 120)) + powercut + + ps -e | grep -w fsstress > /dev/null 2>&1 + while [ $? -eq 0 ] + do + killall -9 fsstress > /dev/null 2>&1 + sleep 1 + ps -e | grep -w fsstress > /dev/null 2>&1 + done + + while true + do + res=`mount | grep "$MNT"` + if [[ "$res" == "" ]] + then + break; + fi + umount $MNT + sleep 0.1 + done + + echo 'format "UBIFS DBG repair" +pflmt' > /sys/kernel/debug/dynamic_debug/control + echo "$DEV" > /sys/kernel/debug/ubifs/repair_fs + res=$? + if [[ $res != 0 ]] + then + fatal "repair fail $res" + fi + + check_memleak + + dmesg -c > /dev/null # powercut and repairing could reproduce error messages + + enable_chkfs + + mount_ubifs $DEV $MNT + res=$? + if [[ $res != 0 ]] + then + fatal "mount fail $res" + fi + + if [[ "$encryption" == "encrypted" ]]; then + encryption_set_key $MNT + fi + + du -sh $MNT > /dev/null # Make sure all files are accessible + ret=$? + if [[ $ret != 0 ]]; then + fatal "Cannot access all files" + fi + check_err_msg + + umount $MNT + res=$? + if [[ $res != 0 ]] + then + fatal "unmount fail $res" + fi + + check_err_msg + + modprobe -r ubifs + modprobe -r ubi + modprobe -r $simulator + + echo "----------------------------------------------------------------------" +} + +check_fsstress +start_t=$(date +%s) +echo "Do powercut+repair+mount test in kinds of flashes" +for simulator in "mtdram" "nandsim"; do + for encryption in "encrypted" "noencrypted"; do + run_test "$simulator" "16" "16" "512" $encryption + run_test "$simulator" "64" "16" "512" $encryption + run_test "$simulator" "128" "64" "2048" $encryption + run_test "$simulator" "256" "128" "2048" $encryption + run_test "$simulator" "512" "128" "2048" $encryption + run_test "$simulator" "1024" "512" "2048" $encryption + done +done +end_t=$(date +%s) +time_cost=$(( end_t - start_t )) +echo "Success, cost $time_cost seconds" +exit 0 From patchwork Thu Dec 28 01:36:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhihao Cheng X-Patchwork-Id: 1880638 X-Patchwork-Delegate: david.oberhollenzer@sigma-star.at Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=Wj52OzY0; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4T0rf70bKTz23dn for ; Thu, 28 Dec 2023 12:34:36 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=uNEx662dbGzVuaHeSv8uQsZmZYm9Z3jP5Z7Fw5Qm/TY=; b=Wj52OzY02Aco1k liq2vwdLS7sJBJj8HI5YHxSdxkq3rDjtCJJL57VUr6TnL/V/NDG1fHUgKN3KDSM+98QzLiYySPs/r zqG1XejcSzB7bsQ/LM7MTGlCoIcq6tRFFlpcL/3EkiE+efx28bwX/fFmDXuIs/nrMyOfHJu50uZGs Vvmtn0qpIJE8/WE6kc+at/awzKIMlD20Eitf3YP0/ygGD7RzCdVT6k77+deJ5JpGKbmwyEREomxQZ BPV5+05PB2fKRlavZ4SqquG9sq+/a6plNaqle0W/j3xRJNDIU78soqD1CRMGdlmJPywMYcASw8twO JqQRL2UCc/aAVE/S5OsA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rIfHZ-00Fo3z-2I; Thu, 28 Dec 2023 01:33:57 +0000 Received: from szxga05-in.huawei.com ([45.249.212.191]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rIfHU-00Fo27-2M for linux-mtd@lists.infradead.org; Thu, 28 Dec 2023 01:33:54 +0000 Received: from mail.maildlp.com (unknown [172.19.88.214]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4T0rXl1Qb6z1FFnD; Thu, 28 Dec 2023 09:29:59 +0800 (CST) Received: from kwepemm000013.china.huawei.com (unknown [7.193.23.81]) by mail.maildlp.com (Postfix) with ESMTPS id 22D4E1A019B; Thu, 28 Dec 2023 09:33:36 +0800 (CST) Received: from huawei.com (10.175.127.227) by kwepemm000013.china.huawei.com (7.193.23.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 28 Dec 2023 09:33:35 +0800 From: Zhihao Cheng To: , , , , CC: , Subject: [PATCH mtd-utils 05/11] tests: ubifs_repair: Add corrupt+repair+fault_inject test Date: Thu, 28 Dec 2023 09:36:33 +0800 Message-ID: <20231228013639.2827205-6-chengzhihao1@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20231228013639.2827205-1-chengzhihao1@huawei.com> References: <20231228013639.2827205-1-chengzhihao1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To kwepemm000013.china.huawei.com (7.193.23.81) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231227_173353_133903_F1F2AAFE X-CRM114-Status: GOOD ( 16.08 ) X-Spam-Score: -2.3 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Inject memory/io fault while repairing corrupted UBIFS images. This testcase mainly checks whether ubifs_repair has problems (eg. memleak, UAF, null-ptr-def, etc.) in random error paths. Besides, it p [...] Content analysis details: (-2.3 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 RCVD_IN_MSPIKE_H5 RBL: Excellent reputation (+5) [45.249.212.191 listed in wl.mailspike.net] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [45.249.212.191 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Inject memory/io fault while repairing corrupted UBIFS images. This testcase mainly checks whether ubifs_repair has problems (eg. memleak, UAF, null-ptr-def, etc.) in random error paths. Besides, it provides a similar way to simulate powercut during repairing, and checks whether ubifs_repair can fix an UBIFS image after many repairing rounds interrupted by kinds of errors. Signed-off-by: Zhihao Cheng --- .gitignore | 1 + configure.ac | 3 +- tests/ubifs_repair-tests/Makemodule.am | 3 +- .../cycle_corrupted_repair_fault_inject.sh.in | 233 +++++++++++++++++++++ 4 files changed, 238 insertions(+), 2 deletions(-) create mode 100755 tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh.in diff --git a/.gitignore b/.gitignore index d47282c..52396e6 100644 --- a/.gitignore +++ b/.gitignore @@ -116,6 +116,7 @@ tests/ubifs_repair-tests/lib/common.sh tests/ubifs_repair-tests/tests/authentication_refuse.sh tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh tests/ubifs_repair-tests/tests/powercut_repair_mount.sh +tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh # # Files generated by autotools diff --git a/configure.ac b/configure.ac index 349e4ad..31a7184 100644 --- a/configure.ac +++ b/configure.ac @@ -358,6 +358,7 @@ AC_CONFIG_FILES([tests/fs-tests/fs_help_all.sh tests/ubifs_repair-tests/lib/common.sh tests/ubifs_repair-tests/tests/authentication_refuse.sh tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh - tests/ubifs_repair-tests/tests/powercut_repair_mount.sh]) + tests/ubifs_repair-tests/tests/powercut_repair_mount.sh + tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh]) AC_OUTPUT([Makefile]) diff --git a/tests/ubifs_repair-tests/Makemodule.am b/tests/ubifs_repair-tests/Makemodule.am index 92f288a..0a9fb48 100644 --- a/tests/ubifs_repair-tests/Makemodule.am +++ b/tests/ubifs_repair-tests/Makemodule.am @@ -2,4 +2,5 @@ test_SCRIPTS += \ tests/ubifs_repair-tests/lib/common.sh \ tests/ubifs_repair-tests/tests/authentication_refuse.sh \ tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh \ - tests/ubifs_repair-tests/tests/powercut_repair_mount.sh + tests/ubifs_repair-tests/tests/powercut_repair_mount.sh \ + tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh diff --git a/tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh.in b/tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh.in new file mode 100755 index 0000000..9752970 --- /dev/null +++ b/tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh.in @@ -0,0 +1,233 @@ +#!/bin/sh +# Copyright (c), 2023-2024, Huawei Technologies Co, Ltd. +# Author: Zhihao Cheng +# +# Test Description: +# For many kinds of flash, do following things +# 1. mount UBIFS +# 2. fsstress && unmount +# 3. inject corruption into UBIFS image randomly +# 3. repair ubifs && inject kinds of errors(memory, io) +# 4. check UBIFS mounting result +# Running time: 10min + +TESTBINDIR=@TESTBINDIR@ +source $TESTBINDIR/common.sh + +function run_test() +{ + local simulator="$1"; + local size="$2"; + local peb_size="$3"; + local page_size="$4"; + local encryption=$5; + + echo "======================================================================" + printf "%s" "$simulator: ${size}MiB PEB size ${peb_size}KiB" + if [ "$simulator" = "nandsim" ]; then + printf " %s" "page size ${page_size}KiB" + fi + printf " $encryption\n" + + if [ "$simulator" = "nandsim" ]; then + $TESTBINDIR/load_nandsim.sh "$size" "$peb_size" "$page_size" || echo "cannot load nandsim"; + mtdnum="$(find_mtd_device "$nandsim_patt")" + elif [ "$simulator" = "mtdram" ]; then + load_mtdram "$size" "$peb_size" || echo "cannot load mtdram" + mtdnum="$(find_mtd_device "$mtdram_patt")" + else + fatal "$simulator is not supported" + fi + + flash_eraseall /dev/mtd$mtdnum + modprobe ubi mtd="$mtdnum,$page_size,0,0,1" fm_autoconvert || fatal "modprobe ubi fail" + ubimkvol -N vol_test -m -n 0 /dev/ubi$UBI_NUM || fatal "mkvol fail" + modprobe ubifs || fatal "modprobe ubifs fail" + mount_ubifs $DEV $MNT || fatal "mount ubifs fail" + if [[ "$encryption" == "encrypted" ]]; then + encryption_gen_key + encryption_set_key $MNT + fi + + fsstress -d $MNT -l0 -p4 -n10000 & + + sleep $((RANDOM % 20)) + + ps -e | grep -w fsstress > /dev/null 2>&1 + while [ $? -eq 0 ] + do + killall -9 fsstress > /dev/null 2>&1 + sleep 1 + ps -e | grep -w fsstress > /dev/null 2>&1 + done + + while true + do + res=`mount | grep "$MNT"` + if [[ "$res" == "" ]] + then + break; + fi + umount $MNT + sleep 0.1 + done + + # inject corruption + times=$((RANDOM % 10)) + let times=$times+10 + i=0 + tot_peb=`cat /sys/class/ubi/ubi$UBI_NUM/total_eraseblocks`; + + modprobe -r ubifs + modprobe -r ubi # Stop wear-leveling & erasing worker + while [[ $i -lt $times ]] + do + let i=$i+1; + peb=$((RANDOM % $tot_peb)); + pg=`expr $peb_size \* 1024`; + peb_off=`expr $pg \* $peb` + pages=`expr $pg / $page_size`; + pg=`expr $pages - 2`; + pg=$((RANDOM % $pg)); + pg_off=`expr $pg + 2`; + pg_start=`expr $pages \* $peb`; + pg=`expr $pg_start + $pg_off`; + vid_pg=`expr $pg_start + 1`; + dd if=/dev/mtd$mtdnum of=$TMP_FILE bs=$page_size skip=$vid_pg count=1 2>/dev/null; + content=`cat $TMP_FILE | grep UBI!`; # vid header magic + if [[ "$content" == "" ]]; then + # Skip free PEB, otherwise data could be overwritten in ubifs repairing process + continue; + fi + if [[ $((RANDOM % 2)) == 0 ]]; then + # Corrupts 1 page + dd if=/dev/urandom of=/dev/mtd$mtdnum bs=$page_size seek=$pg count=1; + else + # Erase 1 LEB, TNC points to an unmapped area + flash_erase /dev/mtd$mtdnum $peb_off 1 + fi + done + rm -f $TMP_FILE 2>/dev/null + sync + + skip=0 + modprobe ubi mtd="$mtdnum,$page_size,0,0,1" fm_autoconvert + ret=$? + if [[ $ret != 0 ]] + then + skip=1 + echo "UBI layout volume is corrupted, skip" + fi + + if [[ $skip == 0 ]]; then + modprobe ubifs || fatal "modprobe ubifs2 fail" + dmesg -c > /dev/null + + round=0 + while true; + do + injected=0 + inject_mem=0 + res=0 + let round=$round+1 + + echo 'format "UBIFS DBG repair" +pflmt' > /sys/kernel/debug/dynamic_debug/control + if [[ $round -lt 50 ]]; then + injected=1 + echo "$DEV" > /sys/kernel/debug/ubifs/repair_fs & + pid=$! + if [[ $((RANDOM % 2)) == 0 ]]; then + inject_mem_err $pid + inject_mem=1 + fi + inject_io_err + wait $pid + res=$? + if [[ $inject_mem == 1 ]]; then + cancel_mem_err + fi + cancel_io_err + else + echo "$DEV" > /sys/kernel/debug/ubifs/repair_fs + res=$? + fi + if [[ $res != 0 ]] + then + log=`dmesg | grep "bad node at LEB 0:"` + if [[ "$log" != "" ]] + then + skip=1 + echo "SB is corrupted, skip repairing & mounting" + break + else + check_memleak + # UBI could become ro-mode + modprobe -r ubifs + modprobe -r ubi + modprobe ubi mtd="$mtdnum,$page_size,0,0,1" fm_autoconvert + modprobe ubifs || fatal "modprobe ubifs3 fail" + if [[ $injected == 0 ]]; then + fatal "repair fail $res" + fi + fi + else + break + fi + done + + check_memleak + + dmesg -c > /dev/null # repairing corrupted image could reproduce error messages + + if [[ $skip == 0 ]]; then + enable_chkfs + + mount_ubifs $DEV $MNT + res=$? + if [[ $res != 0 ]] + then + fatal "mount fail $res" + fi + + if [[ "$encryption" == "encrypted" ]]; then + encryption_set_key $MNT + fi + + du -sh $MNT > /dev/null # Make sure all files are accessible + ret=$? + if [[ $ret != 0 ]]; then + fatal "Cannot access all files" + fi + # check_err_msg is not suggested in this testcase, because + # ubi_io_read(triggered by wear_leveling_worker -> ubi_eba_copy_leb) + # could print stack if ecc uncorrectable errors are detected. + + umount $MNT + res=$? + if [[ $res != 0 ]] + then + fatal "unmount fail $res" + fi + fi + + modprobe -r ubifs + modprobe -r ubi + fi + modprobe -r $simulator + + echo "----------------------------------------------------------------------" +} + +check_fsstress +start_t=$(date +%s) +echo "Do corrruption+cycle_repair_fault_injection test in kinds of flashes" +for simulator in "mtdram" "nandsim"; do + for encryption in "encrypted" "noencrypted"; do + run_test "$simulator" "16" "16" "512" $encryption + run_test "$simulator" "256" "128" "2048" $encryption + done +done +end_t=$(date +%s) +time_cost=$(( end_t - start_t )) +echo "Success, cost $time_cost seconds" +exit 0 From patchwork Thu Dec 28 01:36:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhihao Cheng X-Patchwork-Id: 1880643 X-Patchwork-Delegate: david.oberhollenzer@sigma-star.at Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=wepNga+B; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4T0rfB1Dw1z20Rq for ; Thu, 28 Dec 2023 12:34:42 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=4Sl95dSQWdPK7l2L/bishV+jhFZ6f2aKEe6pBGMSL4g=; b=wepNga+B7vzHSp ylikJn0A11uWNBtmRg33KRPzi3Dq5p3tBqoLptjm597vWh2HSZ/0LfUvAeI+y0oR3ymZ6HRdleZSX exnh9wUgdXzxse1WkQxWN602Rdj12JYyumhhe4+tBeVv1p8aBTup+6D9s0PDC3NZ2/yzdBuwN1Mw0 ACq5UJJf+gE9dwfKrMSIvBGXmOPVNF+W1Aixi74cxP4tHvm+Z1qUZvd8EWs2WB2Aufbyqu0KsyaTS gq7PirR9nsOlSWwl3xXa00PtG+MSIXR+IPxrITfyLLu/bLqQtNV43vtpAoW9fiSt5LrhkWbU9Z+SY ublE0rU+j8EJOCYqeAFw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rIfHr-00FoCM-2d; Thu, 28 Dec 2023 01:34:15 +0000 Received: from szxga05-in.huawei.com ([45.249.212.191]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rIfHo-00Fo9z-2p for linux-mtd@lists.infradead.org; Thu, 28 Dec 2023 01:34:14 +0000 Received: from mail.maildlp.com (unknown [172.19.88.214]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4T0rby129Mz1g0DD; Thu, 28 Dec 2023 09:32:46 +0800 (CST) Received: from kwepemm000013.china.huawei.com (unknown [7.193.23.81]) by mail.maildlp.com (Postfix) with ESMTPS id 2F2161A0196; Thu, 28 Dec 2023 09:33:51 +0800 (CST) Received: from huawei.com (10.175.127.227) by kwepemm000013.china.huawei.com (7.193.23.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 28 Dec 2023 09:33:35 +0800 From: Zhihao Cheng To: , , , , CC: , Subject: [PATCH mtd-utils 06/11] tests: ubifs_repair: Add cycle_powercut+repair test Date: Thu, 28 Dec 2023 09:36:34 +0800 Message-ID: <20231228013639.2827205-7-chengzhihao1@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20231228013639.2827205-1-chengzhihao1@huawei.com> References: <20231228013639.2827205-1-chengzhihao1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To kwepemm000013.china.huawei.com (7.193.23.81) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231227_173413_290047_D3E349D7 X-CRM114-Status: GOOD ( 13.64 ) X-Spam-Score: -2.3 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Inject powercut while doing fsstress on mounted UBIFS, check the consistency of UBIFS after repairing. This testscase mainly makes sure that ubifs_repair can make UBIFS image be consistent in common s [...] Content analysis details: (-2.3 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 RCVD_IN_MSPIKE_H5 RBL: Excellent reputation (+5) [45.249.212.191 listed in wl.mailspike.net] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [45.249.212.191 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Inject powercut while doing fsstress on mounted UBIFS, check the consistency of UBIFS after repairing. This testscase mainly makes sure that ubifs_repair can make UBIFS image be consistent in common stress cases and powercut cases. Signed-off-by: Zhihao Cheng --- .gitignore | 1 + configure.ac | 3 +- tests/ubifs_repair-tests/Makemodule.am | 3 +- .../tests/cycle_powercut_mount_repair.sh.in | 132 +++++++++++++++++++++ 4 files changed, 137 insertions(+), 2 deletions(-) create mode 100755 tests/ubifs_repair-tests/tests/cycle_powercut_mount_repair.sh.in diff --git a/.gitignore b/.gitignore index 52396e6..7077b8d 100644 --- a/.gitignore +++ b/.gitignore @@ -117,6 +117,7 @@ tests/ubifs_repair-tests/tests/authentication_refuse.sh tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh tests/ubifs_repair-tests/tests/powercut_repair_mount.sh tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh +tests/ubifs_repair-tests/tests/cycle_powercut_mount_repair.sh # # Files generated by autotools diff --git a/configure.ac b/configure.ac index 31a7184..b3dd453 100644 --- a/configure.ac +++ b/configure.ac @@ -359,6 +359,7 @@ AC_CONFIG_FILES([tests/fs-tests/fs_help_all.sh tests/ubifs_repair-tests/tests/authentication_refuse.sh tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh tests/ubifs_repair-tests/tests/powercut_repair_mount.sh - tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh]) + tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh + tests/ubifs_repair-tests/tests/cycle_powercut_mount_repair.sh]) AC_OUTPUT([Makefile]) diff --git a/tests/ubifs_repair-tests/Makemodule.am b/tests/ubifs_repair-tests/Makemodule.am index 0a9fb48..4a7f5ed 100644 --- a/tests/ubifs_repair-tests/Makemodule.am +++ b/tests/ubifs_repair-tests/Makemodule.am @@ -3,4 +3,5 @@ test_SCRIPTS += \ tests/ubifs_repair-tests/tests/authentication_refuse.sh \ tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh \ tests/ubifs_repair-tests/tests/powercut_repair_mount.sh \ - tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh + tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh \ + tests/ubifs_repair-tests/tests/cycle_powercut_mount_repair.sh diff --git a/tests/ubifs_repair-tests/tests/cycle_powercut_mount_repair.sh.in b/tests/ubifs_repair-tests/tests/cycle_powercut_mount_repair.sh.in new file mode 100755 index 0000000..792f360 --- /dev/null +++ b/tests/ubifs_repair-tests/tests/cycle_powercut_mount_repair.sh.in @@ -0,0 +1,132 @@ +#!/bin/sh +# Copyright (c), 2023-2024, Huawei Technologies Co, Ltd. +# Author: Zhihao Cheng +# +# Test Description: +# Do many cycles of mount/fsstress/powercut/umount/repair/mount, check whether +# mount is successful. +# Running time: 9h + +TESTBINDIR=@TESTBINDIR@ +source $TESTBINDIR/common.sh + +ID="0x20,0xa7,0x00,0x26" # 4G 256KB 4KB 2KB-sub-page + +function run_test() +{ + local encryption=$1 + + echo "Do cycle mount+powercut+repair+umount($encryption) test" + modprobe nandsim id_bytes=$ID + mtdnum="$(find_mtd_device "$nandsim_patt")" + flash_eraseall /dev/mtd$mtdnum + + dmesg -c > /dev/null + + modprobe ubi mtd="$mtdnum,4096,0,0,1" fm_autoconvert || fatal "modprobe ubi fail" + ubimkvol -N vol_test -m -n 0 /dev/ubi$UBI_NUM || fatal "mkvol fail" + modprobe ubifs || fatal "modprobe ubifs fail" + + if [[ "$encryption" == "encrypted" ]]; then + encryption_gen_key + fi + + round=0 + while [[ $round -lt 60 ]] + do + echo "---------------------- ROUND $round ----------------------" + let round=$round+1 + + mount_ubifs $DEV $MNT || fatal "mount ubifs fail" + if [[ "$encryption" == "encrypted" ]]; then + encryption_set_key $MNT + fi + + if [[ $(($round % 30)) == 0 ]] + then + echo "Clean files" + rm -rf $MNT/* + check_err_msg + fi + + fsstress -d $MNT -l0 -p4 -n10000 & + sleep $((RANDOM % 30)) + check_err_msg # Make sure new operations are okay after repairing UBIFS + powercut + + ps -e | grep -w fsstress > /dev/null 2>&1 + while [ $? -eq 0 ] + do + killall -9 fsstress > /dev/null 2>&1 + sleep 1 + ps -e | grep -w fsstress > /dev/null 2>&1 + done + + while true + do + res=`mount | grep "$MNT"` + if [[ "$res" == "" ]] + then + break; + fi + umount $MNT + sleep 0.1 + done + + echo 'format "UBIFS DBG repair" +pflmt' > /sys/kernel/debug/dynamic_debug/control + echo "$DEV" > /sys/kernel/debug/ubifs/repair_fs + res=$? + if [[ $res != 0 ]] + then + fatal "repair fail $res" + fi + + check_memleak + + dmesg -c > /dev/null # powercut and repairing could reproduce error messages + + enable_chkfs + + mount_ubifs $DEV $MNT + res=$? + if [[ $res != 0 ]] + then + fatal "mount fail $res" + fi + + if [[ "$encryption" == "encrypted" ]]; then + encryption_set_key $MNT + fi + + du -sh $MNT > /dev/null # Make sure all files are accessible + ret=$? + if [[ $ret != 0 ]]; then + fatal "Cannot access all files" + fi + check_err_msg + + umount $MNT + res=$? + if [[ $res != 0 ]] + then + fatal "unmount fail $res" + fi + + check_err_msg + + disable_chkfs + done + + modprobe -r ubifs + modprobe -r ubi + modprobe -r nandsim +} + +check_fsstress +start_t=$(date +%s) +run_test "encrypted" +run_test "noencrypted" +end_t=$(date +%s) +time_cost=$(( end_t - start_t )) +echo "Success, cost $time_cost seconds" +exit 0 From patchwork Thu Dec 28 01:36:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhihao Cheng X-Patchwork-Id: 1880644 X-Patchwork-Delegate: david.oberhollenzer@sigma-star.at Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=M6PAuS1Z; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4T0rfP0Swrz20Rq for ; Thu, 28 Dec 2023 12:34:53 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=xbXoFhsBzxmXSwIdTzfGW3wliMtiN/XSCamJ2Ba5PRc=; b=M6PAuS1ZOC5bIY vIsLRooNEDDrCptat8LbXtPwdq2ZbCKMc1IwuhpMmf95jRNCTYnDc5kz5Dx5xyXMdV3Lk+tVS8NlP SV78M1GvTI70J9OXk8ak/HEXf2LZBp0JKbImtSzOvuL6WfBq4ESgNBPOA+eE8LpxDktabt+r3S6u1 xDADTEPeWyiiwPdJdDIWyG062Tz/n/XhLsOEUZ819fB+VM0L7glanqXNfq3Ov5IJrtR6y9WKduJ+b Y+nv6LV97AjxNyRykYFFPBSRc6ldwHMv3mUx1cI3j2dHz1Va5o7C2RMCj9EP8wV8b9ng805I60P3U kSU1QcHPLR8hKFQ78+/g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rIfI3-00FoKE-1b; Thu, 28 Dec 2023 01:34:27 +0000 Received: from szxga07-in.huawei.com ([45.249.212.35]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rIfI0-00FoG0-1B for linux-mtd@lists.infradead.org; Thu, 28 Dec 2023 01:34:26 +0000 Received: from mail.maildlp.com (unknown [172.19.88.214]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4T0rcD4mJrz1R5Yg; Thu, 28 Dec 2023 09:33:00 +0800 (CST) Received: from kwepemm000013.china.huawei.com (unknown [7.193.23.81]) by mail.maildlp.com (Postfix) with ESMTPS id 3BA5E1A0192; Thu, 28 Dec 2023 09:34:06 +0800 (CST) Received: from huawei.com (10.175.127.227) by kwepemm000013.china.huawei.com (7.193.23.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 28 Dec 2023 09:33:36 +0800 From: Zhihao Cheng To: , , , , CC: , Subject: [PATCH mtd-utils 07/11] tests: ubifs_repair: Add random_corrupt+repair test Date: Thu, 28 Dec 2023 09:36:35 +0800 Message-ID: <20231228013639.2827205-8-chengzhihao1@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20231228013639.2827205-1-chengzhihao1@huawei.com> References: <20231228013639.2827205-1-chengzhihao1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To kwepemm000013.china.huawei.com (7.193.23.81) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231227_173424_729000_E92D031D X-CRM114-Status: GOOD ( 15.38 ) X-Spam-Score: -2.3 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Inject random corruption on UBIFS image by writting random data on kinds of mtd devices (eg. nand, nor), check the consistency of UBIFS after repairing. This testcase simulate random bad UBIFS image c [...] Content analysis details: (-2.3 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [45.249.212.35 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 RCVD_IN_MSPIKE_H5 RBL: Excellent reputation (+5) [45.249.212.35 listed in wl.mailspike.net] 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Inject random corruption on UBIFS image by writting random data on kinds of mtd devices (eg. nand, nor), check the consistency of UBIFS after repairing. This testcase simulate random bad UBIFS image caused by hardware exceptions(eg. ecc uncorrectable, unwritten), and makes sure that ubifs_repair could make UBIFS be consistent after repairing UBIFS image. Signed-off-by: Zhihao Cheng --- .gitignore | 1 + configure.ac | 3 +- tests/ubifs_repair-tests/Makemodule.am | 3 +- .../tests/random_corrupted_repair.sh.in | 205 +++++++++++++++++++++ 4 files changed, 210 insertions(+), 2 deletions(-) create mode 100755 tests/ubifs_repair-tests/tests/random_corrupted_repair.sh.in diff --git a/.gitignore b/.gitignore index 7077b8d..dbe63b7 100644 --- a/.gitignore +++ b/.gitignore @@ -118,6 +118,7 @@ tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh tests/ubifs_repair-tests/tests/powercut_repair_mount.sh tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh tests/ubifs_repair-tests/tests/cycle_powercut_mount_repair.sh +tests/ubifs_repair-tests/tests/random_corrupted_repair.sh # # Files generated by autotools diff --git a/configure.ac b/configure.ac index b3dd453..11d34bd 100644 --- a/configure.ac +++ b/configure.ac @@ -360,6 +360,7 @@ AC_CONFIG_FILES([tests/fs-tests/fs_help_all.sh tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh tests/ubifs_repair-tests/tests/powercut_repair_mount.sh tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh - tests/ubifs_repair-tests/tests/cycle_powercut_mount_repair.sh]) + tests/ubifs_repair-tests/tests/cycle_powercut_mount_repair.sh + tests/ubifs_repair-tests/tests/random_corrupted_repair.sh]) AC_OUTPUT([Makefile]) diff --git a/tests/ubifs_repair-tests/Makemodule.am b/tests/ubifs_repair-tests/Makemodule.am index 4a7f5ed..323102b 100644 --- a/tests/ubifs_repair-tests/Makemodule.am +++ b/tests/ubifs_repair-tests/Makemodule.am @@ -4,4 +4,5 @@ test_SCRIPTS += \ tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh \ tests/ubifs_repair-tests/tests/powercut_repair_mount.sh \ tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh \ - tests/ubifs_repair-tests/tests/cycle_powercut_mount_repair.sh + tests/ubifs_repair-tests/tests/cycle_powercut_mount_repair.sh \ + tests/ubifs_repair-tests/tests/random_corrupted_repair.sh diff --git a/tests/ubifs_repair-tests/tests/random_corrupted_repair.sh.in b/tests/ubifs_repair-tests/tests/random_corrupted_repair.sh.in new file mode 100755 index 0000000..61ec64e --- /dev/null +++ b/tests/ubifs_repair-tests/tests/random_corrupted_repair.sh.in @@ -0,0 +1,205 @@ +#!/bin/sh +# Copyright (c), 2023-2024, Huawei Technologies Co, Ltd. +# Author: Zhihao Cheng +# +# Test Description: +# For many kinds of flash, do following things +# 1. mount UBIFS +# 2. fsstress && unmount +# 3. inject corruption into UBIFS image randomly +# 3. repair ubifs +# 4. check UBIFS mounting result +# Running time: 10h + +TESTBINDIR=@TESTBINDIR@ +source $TESTBINDIR/common.sh + +function run_test() +{ + local simulator="$1"; + local size="$2"; + local peb_size="$3"; + local page_size="$4"; + local encryption=$5; + + echo "======================================================================" + printf "%s" "$simulator: ${size}MiB PEB size ${peb_size}KiB" + if [ "$simulator" = "nandsim" ]; then + printf " %s" "page size ${page_size}KiB" + fi + printf " $encryption\n" + + if [ "$simulator" = "nandsim" ]; then + $TESTBINDIR/load_nandsim.sh "$size" "$peb_size" "$page_size" || echo "cannot load nandsim"; + mtdnum="$(find_mtd_device "$nandsim_patt")" + elif [ "$simulator" = "mtdram" ]; then + load_mtdram "$size" "$peb_size" || echo "cannot load mtdram" + mtdnum="$(find_mtd_device "$mtdram_patt")" + else + fatal "$simulator is not supported" + fi + + flash_eraseall /dev/mtd$mtdnum + modprobe ubi mtd="$mtdnum,$page_size,0,0,1" fm_autoconvert || fatal "modprobe ubi fail" + ubimkvol -N vol_test -m -n 0 /dev/ubi$UBI_NUM || fatal "mkvol fail" + modprobe ubifs || fatal "modprobe ubifs fail" + mount_ubifs $DEV $MNT || fatal "mount ubifs fail" + if [[ "$encryption" == "encrypted" ]]; then + encryption_gen_key + encryption_set_key $MNT + fi + + fsstress -d $MNT -l0 -p4 -n10000 & + + while true; + do + per=`df -Th | grep ubifs | awk '{print $6}'`; + if [[ ${per%?} -gt 95 ]]; then + # Used > 95% + break; + fi + done + + ps -e | grep -w fsstress > /dev/null 2>&1 + while [ $? -eq 0 ] + do + killall -9 fsstress > /dev/null 2>&1 + sleep 1 + ps -e | grep -w fsstress > /dev/null 2>&1 + done + + while true + do + res=`mount | grep "$MNT"` + if [[ "$res" == "" ]] + then + break; + fi + umount $MNT + sleep 0.1 + done + + # injection + times=$((RANDOM % 10)) + let times=$times+10 + i=0 + tot_peb=`cat /sys/class/ubi/ubi$UBI_NUM/total_eraseblocks`; + + modprobe -r ubifs + modprobe -r ubi # Stop wear-leveling & erasing worker + while [[ $i -lt $times ]] + do + let i=$i+1; + peb=$((RANDOM % $tot_peb)); + pg=`expr $peb_size \* 1024`; + peb_off=`expr $pg \* $peb` + pages=`expr $pg / $page_size`; + pg=`expr $pages - 2`; + pg=$((RANDOM % $pg)); + pg_off=`expr $pg + 2`; + pg_start=`expr $pages \* $peb`; + pg=`expr $pg_start + $pg_off`; + vid_pg=`expr $pg_start + 1`; + dd if=/dev/mtd$mtdnum of=$TMP_FILE bs=$page_size skip=$vid_pg count=1 2>/dev/null; + content=`cat $TMP_FILE | grep UBI!`; # vid header magic + if [[ "$content" == "" ]]; then + # Skip free PEB, otherwise data could be overwritten in ubifs repairing process + continue; + fi + if [[ $((RANDOM % 2)) == 0 ]]; then + # Corrupts 1 page + dd if=/dev/urandom of=/dev/mtd$mtdnum bs=$page_size seek=$pg count=1; + else + # Erase 1 LEB, TNC points to an unmapped area + flash_erase /dev/mtd$mtdnum $peb_off 1 + fi + done + rm -f $TMP_FILE 2>/dev/null + sync + + skip=0 + modprobe ubi mtd="$mtdnum,$page_size,0,0,1" fm_autoconvert + ret=$? + if [[ $ret != 0 ]] + then + skip=1 + echo "UBI layout volume is corrupted, skip" + fi + + if [[ $skip == 0 ]]; then + modprobe ubifs || fatal "modprobe ubifs2 fail" + dmesg -c > /dev/null + echo 'format "UBIFS DBG repair" +pflmt' > /sys/kernel/debug/dynamic_debug/control + echo "$DEV" > /sys/kernel/debug/ubifs/repair_fs + res=$? + if [[ $res != 0 ]] + then + log=`dmesg | grep "bad node at LEB 0:"` + if [[ "$log" != "" ]] + then + skip=1 + echo "SB is corrupted, skip repairing & mounting" + else + fatal "repair fail $res" + fi + fi + + check_memleak + + if [[ $skip == 0 ]]; then + dmesg -c > /dev/null # repairing corrupted image could reproduce error messages + + enable_chkfs + + mount_ubifs $DEV $MNT + res=$? + if [[ $res != 0 ]] + then + fatal "mount fail $res" + fi + + if [[ "$encryption" == "encrypted" ]]; then + encryption_set_key $MNT + fi + + du -sh $MNT > /dev/null # Make sure all files are accessible + ret=$? + if [[ $ret != 0 ]]; then + fatal "Cannot access all files" + fi + # check_err_msg is not suggested in this testcase, because + # ubi_io_read(triggered by wear_leveling_worker -> ubi_eba_copy_leb) + # could print stack if ecc uncorrectable errors are detected. + + umount $MNT + res=$? + if [[ $res != 0 ]] + then + fatal "unmount fail $res" + fi + fi + modprobe -r ubifs + modprobe -r ubi + fi + modprobe -r $simulator + + echo "----------------------------------------------------------------------" +} + +check_fsstress +start_t=$(date +%s) +echo "Do random_corrruption+repair+mount test in kinds of flashes" +for simulator in "mtdram" "nandsim"; do + for encryption in "encrypted" "noencrypted"; do + run_test "$simulator" "16" "16" "512" $encryption + run_test "$simulator" "64" "16" "512" $encryption + run_test "$simulator" "128" "64" "2048" $encryption + run_test "$simulator" "256" "128" "2048" $encryption + run_test "$simulator" "512" "128" "2048" $encryption + run_test "$simulator" "1024" "512" "2048" $encryption + done +done +end_t=$(date +%s) +time_cost=$(( end_t - start_t )) +echo "Success, cost $time_cost seconds" +exit 0 From patchwork Thu Dec 28 01:36:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhihao Cheng X-Patchwork-Id: 1880645 X-Patchwork-Delegate: david.oberhollenzer@sigma-star.at Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=GQXPP5DS; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4T0rg10zpLz23d7 for ; Thu, 28 Dec 2023 12:35:25 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=r2i5+bdk8fOy4LindPbEVLd84sCyHg9xUL7Je/5gP74=; b=GQXPP5DSdSHeiQ QhYGHvzLbrGGjiF/VhJy8n4m68PhonklZHGvyV4iAC60dN7f0SK35IT9en2bTOL8j6trOelj7JAss uMUiNt6TP4BbzgcjxKK/LX4JiUAWNHtkGVUi5JhzyVI/sraIEibyIFHFmNX/5fYv5YpwvJDQAhl83 +psSVnK7oeGL+HjFcMdaQS29GejUW/g1jLRpngIDXq1EczGHEfYBwZ9EJKovKSV4AVJzNJbmyOdIG 6uRaKx/3zAYLUNAKKGCHH+31Iz9Qdc+fgawobcLIVtUsZOF6Y54tF1taDn/sIczcvq32coPgNQ9tI ZBrEeQFocfDt2hFqmF7Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rIfIU-00FoaZ-2v; Thu, 28 Dec 2023 01:34:54 +0000 Received: from szxga06-in.huawei.com ([45.249.212.32]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rIfIL-00FoT0-2Y for linux-mtd@lists.infradead.org; Thu, 28 Dec 2023 01:34:53 +0000 Received: from mail.maildlp.com (unknown [172.19.88.214]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4T0rdt0vwyz1vqLt; Thu, 28 Dec 2023 09:34:26 +0800 (CST) Received: from kwepemm000013.china.huawei.com (unknown [7.193.23.81]) by mail.maildlp.com (Postfix) with ESMTPS id 482541A0198; Thu, 28 Dec 2023 09:34:21 +0800 (CST) Received: from huawei.com (10.175.127.227) by kwepemm000013.china.huawei.com (7.193.23.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 28 Dec 2023 09:33:37 +0800 From: Zhihao Cheng To: , , , , CC: , Subject: [PATCH mtd-utils 08/11] tests: ubifs_repair: Add corrupted images Date: Thu, 28 Dec 2023 09:36:36 +0800 Message-ID: <20231228013639.2827205-9-chengzhihao1@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20231228013639.2827205-1-chengzhihao1@huawei.com> References: <20231228013639.2827205-1-chengzhihao1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To kwepemm000013.china.huawei.com (7.193.23.81) X-Spam-Note: CRM114 run bypassed due to message size (272706 bytes) X-Spam-Score: -2.3 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: This is a preparation for adding repairing testcase. There is no debugfs tools (for example: debugfs[ext4], xfs_db) for UBIFS, so no way to inject precise corruption into UBIFS image, we have to prepa [...] Content analysis details: (-2.3 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [45.249.212.32 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 RCVD_IN_MSPIKE_H5 RBL: Excellent reputation (+5) [45.249.212.32 listed in wl.mailspike.net] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org This is a preparation for adding repairing testcase. There is no debugfs tools (for example: debugfs[ext4], xfs_db) for UBIFS, so no way to inject precise corruption into UBIFS image, we have to prepare inconsistent UBIFS images in advance like e2fsprogs[1] does. (Goto [2] to see how to generate inconsistent UBIFS images). Here's a descriptons of the various test images: ========================================================================= image | Description | expectancy ------------------------------------------------------------------------- good | good image contains | repair success, fs content is | kinds of files. | not changed. ------------------------------------------------------------------------- sb_fanout | invalid fanout in | repair failed. | superblock. | ------------------------------------------------------------------------- sb_fmt_version | invalid fmt_version | repair failed. | in superblock. | ------------------------------------------------------------------------- sb_leb_size | invalid leb_size in | repair failed. | superblock. | ------------------------------------------------------------------------- sb_log_lebs | invalid log lebs in | repair failed. | superblock. | ------------------------------------------------------------------------- sb_min_io_size | invalid min_io_size | repair failed. | in superblock. | ------------------------------------------------------------------------- master_highest_inum | invalid highest_inum| repair success, fs content is | in master nodes. | not changed. ------------------------------------------------------------------------- master_lpt | bad lpt pos in | repair success, fs content is | master nodes. | not changed. ------------------------------------------------------------------------- master_tnc | bad tnc pos in | repair success, fs content is | master nodes. | not changed. ------------------------------------------------------------------------- master_total_dead | bad total_dead in | repair success, fs content is | master nodes. | not changed. ------------------------------------------------------------------------- master_total_dirty | bad total_dirty in | repair success, fs content is | master nodes. | not changed. ------------------------------------------------------------------------- master_total_free | bad total_free in | repair success, fs content is | master nodes. | not changed. ------------------------------------------------------------------------- log | corrupted log area. | repair success, fs content is | | not changed. ------------------------------------------------------------------------- lpt_dirty | bad dirty in pnode. | repair success, fs content is | | not changed. ------------------------------------------------------------------------- lpt_flags | bad flags in pnode | repair success, fs content is | (eg. index). | not changed. ------------------------------------------------------------------------- lpt_free | bad free in pnode. | repair success, fs content is | | not changed. ------------------------------------------------------------------------- lpt_pos | bad pos in nnode. | repair success, fs content is | | not changed. ------------------------------------------------------------------------- tnc_lv0_key | bad key in lv0 | repair success, fs content is | znode. | not changed. ------------------------------------------------------------------------- tnc_lv0_len | bad len in lv0 | repair success, fs content is | znode. | not changed. ------------------------------------------------------------------------- tnc_lv0_pos | bad pos in lv0 | repair success, fs content is | znode. | not changed. ------------------------------------------------------------------------- tnc_noleaf_key | bad key in non-leaf | repair success, fs content is | znode. | not changed. ------------------------------------------------------------------------- tnc_noleaf_len | bad len in non-leaf | repair success, fs content is | znode. | not changed. ------------------------------------------------------------------------- tnc_noleaf_pos | bad pos in non-leaf | repair success, fs content is | znode. | not changed. ------------------------------------------------------------------------- inode_data | bad data node. | repair success, file content | | is changed, other files are | | not changed. ------------------------------------------------------------------------- inode_mode | bad inode mode for | repair success, soft link | solf link file. | file is dropped, other files | | are not changed. ------------------------------------------------------------------------- inode_nlink | wrong nlink for | repair success, nlink is | file. | corrected, fs content is not | | changed. ------------------------------------------------------------------------- inode_size | wrong inode size | repair success, inode size is | for file. | corrected, fs content is not | | changed. ------------------------------------------------------------------------- inode_xcnt | wrong inode | repair success, xattr_cnt is | xattr_cnt for file. | corrected, fs content is not | | changed. ------------------------------------------------------------------------- soft_link_data_len | bad inode data_len | repair success, soft link | for solt link file. | file is dropped, other files | | are not changed. ------------------------------------------------------------------------- dentry_key | bad dentry key for | repair success, dentry is | file. | removed, other files are | | not changed. ------------------------------------------------------------------------- dentry_nlen | inconsistent nlen | repair success, dentry is | and name in dentry | removed, other files are | for file. | not changed. ------------------------------------------------------------------------- dentry_type | inconsistent type | repair success, dentry is | between dentry and | removed, other files are | inode for file. | not changed. ------------------------------------------------------------------------- xinode_flags | lost UBIFS_XATTR_FL | repair success, xattr is | in xattr inode | removed, other files are | flags for file. | not changed. ------------------------------------------------------------------------- xinode_key | bad xattr inode key | repair success, xattr is | for file. | removed, other files are | | not changed. ------------------------------------------------------------------------- xinode_mode | bad xattr inode | repair success, xattr is | mode for file. | removed, other files are | | not changed. ------------------------------------------------------------------------- xentry_key | bad xattr entry key | repair success, xattr is | for file. | removed, other files are | | not changed. ------------------------------------------------------------------------- xentry_nlen | inconsistent nlen | repair success, xattr is | and name in xattr | removed, other files are | entry for file. | not changed. ------------------------------------------------------------------------- xentry_type | inconsistent type | repair success, xattr is | between xattr entry | removed, other files are | and xattr inode for | not changed. | file. | ------------------------------------------------------------------------- dir_lost | bad dentry for dir. | repair success, dir and files | | under dir are removed, other | | files are not changed. ------------------------------------------------------------------------- root_dir | bad '/'. | repair success, create new | | root dir('/'). ========================================================================= [1] https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/tree/tests/README [2] https://bugzilla.kernel.org/show_bug.cgi?id=218327 Signed-off-by: Zhihao Cheng Signed-off-by: Zhihao Cheng --- Makefile.am | 1 + tests/ubifs_repair-tests/Makemodule.am | 42 +++++++++++++++++++++ tests/ubifs_repair-tests/images/dentry_key.gz | Bin 0 -> 5377 bytes tests/ubifs_repair-tests/images/dentry_nlen.gz | Bin 0 -> 5386 bytes tests/ubifs_repair-tests/images/dentry_type.gz | Bin 0 -> 5384 bytes tests/ubifs_repair-tests/images/dir_lost.gz | Bin 0 -> 5381 bytes tests/ubifs_repair-tests/images/good.gz | Bin 0 -> 5251 bytes tests/ubifs_repair-tests/images/inode_data.gz | Bin 0 -> 5297 bytes tests/ubifs_repair-tests/images/inode_mode.gz | Bin 0 -> 5383 bytes tests/ubifs_repair-tests/images/inode_nlink.gz | Bin 0 -> 5383 bytes tests/ubifs_repair-tests/images/inode_size.gz | Bin 0 -> 5384 bytes tests/ubifs_repair-tests/images/inode_xcnt.gz | Bin 0 -> 5388 bytes tests/ubifs_repair-tests/images/log.gz | Bin 0 -> 5232 bytes tests/ubifs_repair-tests/images/lpt_dirty.gz | Bin 0 -> 5360 bytes tests/ubifs_repair-tests/images/lpt_flags.gz | Bin 0 -> 5361 bytes tests/ubifs_repair-tests/images/lpt_free.gz | Bin 0 -> 5350 bytes tests/ubifs_repair-tests/images/lpt_pos.gz | Bin 0 -> 5374 bytes .../images/master_highest_inum.gz | Bin 0 -> 5034 bytes tests/ubifs_repair-tests/images/master_lpt.gz | Bin 0 -> 5035 bytes tests/ubifs_repair-tests/images/master_tnc.gz | Bin 0 -> 5024 bytes .../ubifs_repair-tests/images/master_total_dead.gz | Bin 0 -> 5033 bytes .../images/master_total_dirty.gz | Bin 0 -> 5032 bytes .../ubifs_repair-tests/images/master_total_free.gz | Bin 0 -> 5030 bytes tests/ubifs_repair-tests/images/root_dir.gz | Bin 0 -> 1298 bytes tests/ubifs_repair-tests/images/sb_fanout.gz | Bin 0 -> 5322 bytes tests/ubifs_repair-tests/images/sb_fmt_version.gz | Bin 0 -> 5326 bytes tests/ubifs_repair-tests/images/sb_leb_size.gz | Bin 0 -> 5324 bytes tests/ubifs_repair-tests/images/sb_log_lebs.gz | Bin 0 -> 5323 bytes tests/ubifs_repair-tests/images/sb_min_io_size.gz | Bin 0 -> 5328 bytes .../images/soft_link_data_len.gz | Bin 0 -> 5389 bytes tests/ubifs_repair-tests/images/tnc_lv0_key.gz | Bin 0 -> 5414 bytes tests/ubifs_repair-tests/images/tnc_lv0_len.gz | Bin 0 -> 5420 bytes tests/ubifs_repair-tests/images/tnc_lv0_pos.gz | Bin 0 -> 5404 bytes tests/ubifs_repair-tests/images/tnc_noleaf_key.gz | Bin 0 -> 5430 bytes tests/ubifs_repair-tests/images/tnc_noleaf_len.gz | Bin 0 -> 5437 bytes tests/ubifs_repair-tests/images/tnc_noleaf_pos.gz | Bin 0 -> 5418 bytes tests/ubifs_repair-tests/images/xentry_key.gz | Bin 0 -> 5378 bytes tests/ubifs_repair-tests/images/xentry_nlen.gz | Bin 0 -> 5386 bytes tests/ubifs_repair-tests/images/xentry_type.gz | Bin 0 -> 5386 bytes tests/ubifs_repair-tests/images/xinode_flags.gz | Bin 0 -> 5384 bytes tests/ubifs_repair-tests/images/xinode_key.gz | Bin 0 -> 5383 bytes tests/ubifs_repair-tests/images/xinode_mode.gz | Bin 0 -> 5386 bytes 42 files changed, 43 insertions(+) create mode 100644 tests/ubifs_repair-tests/images/dentry_key.gz create mode 100644 tests/ubifs_repair-tests/images/dentry_nlen.gz create mode 100644 tests/ubifs_repair-tests/images/dentry_type.gz create mode 100644 tests/ubifs_repair-tests/images/dir_lost.gz create mode 100644 tests/ubifs_repair-tests/images/good.gz create mode 100644 tests/ubifs_repair-tests/images/inode_data.gz create mode 100644 tests/ubifs_repair-tests/images/inode_mode.gz create mode 100644 tests/ubifs_repair-tests/images/inode_nlink.gz create mode 100644 tests/ubifs_repair-tests/images/inode_size.gz create mode 100644 tests/ubifs_repair-tests/images/inode_xcnt.gz create mode 100644 tests/ubifs_repair-tests/images/log.gz create mode 100644 tests/ubifs_repair-tests/images/lpt_dirty.gz create mode 100644 tests/ubifs_repair-tests/images/lpt_flags.gz create mode 100644 tests/ubifs_repair-tests/images/lpt_free.gz create mode 100644 tests/ubifs_repair-tests/images/lpt_pos.gz create mode 100644 tests/ubifs_repair-tests/images/master_highest_inum.gz create mode 100644 tests/ubifs_repair-tests/images/master_lpt.gz create mode 100644 tests/ubifs_repair-tests/images/master_tnc.gz create mode 100644 tests/ubifs_repair-tests/images/master_total_dead.gz create mode 100644 tests/ubifs_repair-tests/images/master_total_dirty.gz create mode 100644 tests/ubifs_repair-tests/images/master_total_free.gz create mode 100644 tests/ubifs_repair-tests/images/root_dir.gz create mode 100644 tests/ubifs_repair-tests/images/sb_fanout.gz create mode 100644 tests/ubifs_repair-tests/images/sb_fmt_version.gz create mode 100644 tests/ubifs_repair-tests/images/sb_leb_size.gz create mode 100644 tests/ubifs_repair-tests/images/sb_log_lebs.gz create mode 100644 tests/ubifs_repair-tests/images/sb_min_io_size.gz create mode 100644 tests/ubifs_repair-tests/images/soft_link_data_len.gz create mode 100644 tests/ubifs_repair-tests/images/tnc_lv0_key.gz create mode 100644 tests/ubifs_repair-tests/images/tnc_lv0_len.gz create mode 100644 tests/ubifs_repair-tests/images/tnc_lv0_pos.gz create mode 100644 tests/ubifs_repair-tests/images/tnc_noleaf_key.gz create mode 100644 tests/ubifs_repair-tests/images/tnc_noleaf_len.gz create mode 100644 tests/ubifs_repair-tests/images/tnc_noleaf_pos.gz create mode 100644 tests/ubifs_repair-tests/images/xentry_key.gz create mode 100644 tests/ubifs_repair-tests/images/xentry_nlen.gz create mode 100644 tests/ubifs_repair-tests/images/xentry_type.gz create mode 100644 tests/ubifs_repair-tests/images/xinode_flags.gz create mode 100644 tests/ubifs_repair-tests/images/xinode_key.gz create mode 100644 tests/ubifs_repair-tests/images/xinode_mode.gz GIT binary patch literal 5386 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 N^r3)t=+Kcv{|92Yws`;m literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/dir_lost.gz b/tests/ubifs_repair-tests/images/dir_lost.gz new file mode 100644 index 0000000000000000000000000000000000000000..70c4e8d22b364be1a9b9bc8c7105dc4196bed4d5 GIT binary patch literal 5381 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 literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/inode_data.gz b/tests/ubifs_repair-tests/images/inode_data.gz new file mode 100644 index 0000000000000000000000000000000000000000..5d3e5ad3b617a5d3f9434f09c9c6165014753441 GIT binary patch literal 5297 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 M*J|3neFyga4oSr9})L8Ti)?+Ly4 zMFa!{q$Ltc=q*5KA%ukdU-$jA&t31=J0H$7XXZTT%rkT5ocWD-)GxodjYT^19Cq{a zc5;Toe+)dU6US`ySwQC|`j*tqa=lo|cz8F2Bmw{J<-44%9^v0IT{WvKFVcR!>|E4( zD!D92+v-|(vx~4qZ+h9=owhjmJ~hkNkHHq`Y8OPew`&cNcwouzR%g!`5Krzj%I1e^N;?T6^UD&z`*U47X8_>;x#|In-EaUzvRt0AdSuN`F;8}X+Vwt+Bj^>RZ#_wXDcOnD zU-7D6t;eta@%na6x#xqV+m8g@ffljHa_@Q`jyOYdWs=ikC>m1J=dH@xUv7lH1&Qt7 zhZvY*N!8H~&vTnSop7avGfP5bmQOY$7*= z_~`@N`FkgmUhzj4xq9cPrmYV*p#uy1i*pV;2Z=ZPxgQe{N<<#|e|KbCP6EI`4*wIZ z{=?%LIg{$U2?xMmaqCtF|J;2%;-NAJz!q{Dz@8PIEl%>j3Q`T(70GSf!qA!p2}M8b zy+xutExbg!Er5$Y_ehJ_{<`y!ed8J>Ghb<@EKSisV;nhv@oS7$Y>9p15pc1P9fc5Z zD)(}LV-pO;GZKh)5E`3tntz@)QBX=HJyL<@2lO4E;pXlIM$c^5chkNFTgeJ^BopGD zPPt=KWkfFzA39s*7ugi6Lps;~y5{=s1@mI^Q=irgrkmfbMDucgFOZr9f#Yc-f+Y%O zlCkfgiZT5Ks#2a%-wVwY07YGJ?Q*JifF~FPMYQ;W!pT%f5~bor0JogBt47b-YL=P= z!{1GK*p;jX1tXf`bz~F?!me20s;|h2T}rR2;35f%E3Zmwo`-5mq7hz=icnqD zdZc7>`2DoA(LSf$H3NU}l+av-M!Ruc{2-e6)kpI#vdMv-X(EzoX+k5K$d=g1)I@cw zo?V9$20s?OldaW_vN{PMpgNO=&08OsFIU*hxs6UKSvtL@McE|d9REi}bM^7$>%%>4 zw#ZLIwPCmwybsI^JdE6q(oHKw=>%1TiUi@FPTs9kkCIgnw&G=RPzXm;Zc1pL(s?#<) z;%uycb?7&ZxSZnemF=AgkwuvSo;SQeE2hJC$!9DVL=nc4=xK)VYcwx{3UN-Uu01AX z#yBAq4k+6nym0>vCYuS`Rd7Ekm2$<=oW6-Se9@XhQa&+^Apjl!ygf&*TaUd@fn ztROx=2omTd&HOoTEJ?#co91eNXO56fZLx+3`mI|*;@6KYj(jNNnw%kF)!o0TYB{Uh z0Ma=Tp!^=47VhD*{2ZqoS{gwyRpMkLIDf8He^aErS_T_cP>jv5g-ZOjK^YeShcQ5@ z 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 S?~fI>kmYM1KOUZ=JpTurzoe1? literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/inode_nlink.gz b/tests/ubifs_repair-tests/images/inode_nlink.gz new file mode 100644 index 0000000000000000000000000000000000000000..64d20e8c1af03976b021cffcad1e58542875d5b5 GIT binary patch literal 5383 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 K*tKi#u73f_9;hz> literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/inode_xcnt.gz b/tests/ubifs_repair-tests/images/inode_xcnt.gz new file mode 100644 index 0000000000000000000000000000000000000000..3b31f03866104dab73ba1c97b1e7065734fb35ea GIT binary patch literal 5388 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 literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/log.gz b/tests/ubifs_repair-tests/images/log.gz new file mode 100644 index 0000000000000000000000000000000000000000..6e6c8a8338af294b7c4575eff355e1f871f41406 GIT binary patch literal 5232 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 literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/lpt_dirty.gz b/tests/ubifs_repair-tests/images/lpt_dirty.gz new file mode 100644 index 0000000000000000000000000000000000000000..1d020b718953ef13ca800b503b17d154c2e1a237 GIT binary patch literal 5360 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 D4=A_J literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/lpt_flags.gz b/tests/ubifs_repair-tests/images/lpt_flags.gz new file mode 100644 index 0000000000000000000000000000000000000000..546e9326b5039a65429f5fa45e8b1f0e3efdbfdc GIT binary patch literal 5361 zcmcgwdpOhm`>$UIl_;eov8RNmgj6VDNh%~c%VB#WXEU0$jM-BvHH9LR(~4N-6f?7# zQDF`_pBd7eGBeDu&Gz|zf8XC<&(rhA@2~IsulstvUhnIEUGMjOU)O!zp!jXuOlxtz z8#aZ6ML_*RZuuiN%#Cb!+vf~oE>e{gcZYqx#QMC?^Rt)5<~mHh(;21B8||%b>|t&3 z)Ngrp6#pC96Jco)F1LkcpnuK&82*~g(KC1_NW=L}>W{>A85nRo;&oJ;>1loj!tb}J zZ18eKDAZDYqQkG|5D9wtZZRrewmm#xxOeTuhJQW_LudzJ*FSR??zcDsC6TX1!1=vL zqV`3^{IhJs=++)!(?4@J7TyCg|4hC4UL7jIu1H-D+O{d|u=2P<_36gn7bsRKI?$Dh z-4i+}YWl zP81Q6x%aB$Y>)dTUN_vg)kxkT`7)T=HXKX-2{ZUnd0g%gFP&HDPcYT}>{LlpFJJFw ze+ljBz_G1w`z6M|Vwz@6I=BZQ-}=o%{@L;ddbW`x0MK8Y+o7#OL`R?PZp*nh{!nrs zL%!p`$TEN2WmDK-v^Sz8X@u5Z-esd+y)$q5hu(n>$4no%#?RKbmb`RMp4M5^Y|8Fw z64D&|mdRDRUX)W<_~80~GX5#rAp)?!Bwv6pJmvt;vq|yy%SrB&`p zSeCg|{Yt`)wT==0Cj?4#=IPZEwKFb|xXV;R!maF;cu(RI&E??~HVZ9WZV|pbE?Dol z^x7^1F!qdk8VwIpy{yFTro8Xj-*0Z0Uc+R5lWAsWB34c+;BJpfkxp+`8);qMjm$_? zAG^o9>-}Vx<>Wlk=Qxx=$21`un;|kbSjqo$*i(L3n;=;jG zr~I+)pY*}bju66SeTajlP^j%W#`y;HW%;zYx@H5)t5>>gSfJ)eOjb0dg?Yu@1{Nu; z7dp0KIhk+JUmDDy^pZ?~NAkN?@xm-2RaeuW{_gP-Vw{i#EEBFQmwYg(F$BcwT#cpb z55ln???f-y2OTr~(mI~T8M&;6=U*PXagQGHxzc*9d zN$z>MOC9>PMart^A`AHPXnElQ@3u(~_o3cbL!CeH{)KVKjV8Nn+jL;Jw8`~=S#rOR zOO`ffG8~4u9&~gkSFv}XyB*tcvi`vn=61Oq$3wKplY+)UI|sWV#uEA-eFz<3Ks^_G zWL2{dFUloErvd2AinZtnqj_@a+n&(F6UEGilBwzS1HpJw93v_9hEMX+G~&|g_0Z=j z{Y3kO{=g(7F?fwfFpjr)e8%P9AG{7f@uv`Ea61>3Y$9CBsBvW^Lc^v1ZXlmu8^|!~ zs{n{>LGaPD{L7{xsW_yZWi!V2SiklYf!Sq;-9r5KOR{$TI)i#uO7`|aVk`D?9<1t% zU82#;6}Zks-yB%k^{T77c0Ut`DMeE;cjQR-7%Goe23%hzC>>EHC6!leX4&cf`GO;c z$st51>cjioy|z*zUURY?v$O4!Lx@tnvZUfZmtxYsb|}k~{W!1Z?u&*%lH);Z{v@#y zV(}Agq4>IP{YQ9o0=E!OXh*Iclp;s{4$RE%o;=vm|GGs>(1c>sDv}ZisFBeLlV-jl zs(o#vyf9ObX9A{<=FoQP;>;}6M-DY2)4a!yJ9WY~q?JQYe&)4ev)7ZJq_jDzU@W zULDF1#hbn6F32Qj)!WW8|Lt%QfC4~|wB7q%NF_|Zy`1zrr1Dy|_2)+u*Nc8TaP{y~ zS4)htH4jFDTE43&T1Iz)UBo?RoskI&s&9vJ(*?(1s(CQ=`m+{4H6TfY2;Che*FAyn zrwY{erJi59i49kE11O1=(qqJ|438$&E)nHr`jU}iIJX|EcBJ^J?_FYiQk9f3$j$Gn zEk8^X)Z`I^$4uy3)6sXY+z&@^&-pqvyo7+gOshF!?40J%%Pw$+Np9KKNIzbKc{q2$F zJ2CiuG*7N{~20N#twau*&5fVc{;=Xx{izo`BXpvx`w0Kt%aDbV(?5i%(D z2)wiFkM(EcN0Ny#*b9RFgm^4K`nDSG+-!}hcud=UotE$0_Qy|NvlkMO?r7}%7ku7wE}?HsWIX44ICaUT5# zhb7KOeT>QAwX4ck%y!+)bNsQSFH+U2({ifp7MeTbeRWW04A;8@7Muvfu|KTa=<`me zrPU|#WQbO1v8+cpI*Qz6i-Vuu)g7#Rs_^*Dr2RDzcmq2`#7*l<-YTudf zigr~FTs{1}$!THjTJQd$^l2?}QKirFmlVeS?p32>X17EmPl-E?+t&Sld~Vq8+-8h% z@pleznWEdguIc^Q!GBVJvjC$0c>a)w*6)5_U>O6n{p5<9w8R4LS#+=yu9|Q$6UOL^utTFbz( zI~8=k(M>(4^HaUthG1`FxO-$SH(c^ONeeh@M)nGzaT=g5H>;d_z~K7m;M82~)tN)F zWu+SGhDJdrwIkn_2Gct0wQGhzD}ql0_>kaJ?1+*9l2s~4{q9a|#2;_O9X$;(p%tWg zma*gX+-Nd>x-Y&Llx{!TPPbl5;AYDcCFfVUYn>m`*4q4uT5vm3DP!=n(XFmW(7tO4 zJbjEar~JcnZH>*qQhl{KXn*OB+4Dz>Ex#os(hF15iUIN@i(NhB?n>Vq+5zhfOk5&n zYH`D|r`*3uYdd5+H%(J_zFx8^C8$LV!uKFgeTp2s5FaZsGoYUOfarWuJJ1;CWro5b zBHhN2ZLwd8Q@zH0f!t@Nj;Xz^v)O}-)9k0y*S1jPEo4C%HAB(9t$QeDUgfenak_H!1>==8&9AR_h%V84tT4Vc zaSZe6xCS+2;j2EVrB;8VvViPI$$w5V8(Ys;T91l=-*Cs0=jLgoqfswU1JH zX-G-c=j@aS_ZmT4Sv^!af60DtJfW2rv)_~+%~FfYVmD~zh1Tew(-F4#VJ;JgEoIN+ zbyn8D$86#6G4i3I7+GZTL|1$Pg|Z{9f?L%DV;JA7YJX6;&jO=rXm{X!$q4o6rv^|p zab6{?Y<$*I5-JkkwjJ`QW~RI^)sA7gk{*@zg#|4v9!s!q6=#$SjLm{dI#am?22p-7 z6vN4>CzYm&Eu*IVPepiVYT3xF<=HDKPv*`aeKVe~u{UAp*}}phiuu}`+pMx;K5*^a z8MgJ0w_-67<44b}=9f1!R-1>7tY8zB_ojPP^Ka>UwR%0ww)p5tSAZVz&9?uc6bHZk z?ry<~(8YstGDDvvDEc2W*|dcPPxMUj(_rSTL3Bh^_!dAmTlZGJ^u_kj?K-w>lic+B zt@%a=$ZxE#29YLqy!vWJNLuE( zirY_;;#p%7eka6tS}z-{udg{{PS}#iMSJWr#uk06k5hiCom}yJXU%zv`S6>M;)=~0 zSby|l%ICgKS)iRHiTe73C=vXyg`dLK_+Yyj*vlgdfGurh2Kn0?*_0uL;iE@81BnBB$Fi#|U zxetZb*2@6F)AJXDpRv#Wc|O;dMDEJLg(D#XX zUULKIU@!!#GLM{tkfcxa66N7TCq)sh^UEYY4+4q|bQ9)`KVqx7?2mq5wS2A&fc3rh zr?$ALmVC&-_jr|+1Fsfw3euU& zQnF6ep}Hg;koD7ioLY~WdUW`yK_;Gn*3z9hC;OM#OO$IT1qa>$F98(2ngBVG^e^m& z4JUUu{(b#*VL>zjSV)=x>=V@|bz;QD8u!@wn>)^ksHuF>j_hmFT IY}mTtU)`Oms{jB1 literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/lpt_free.gz b/tests/ubifs_repair-tests/images/lpt_free.gz new file mode 100644 index 0000000000000000000000000000000000000000..31c46a0f6277f96a0b04c362c1fb84442333f5e7 GIT binary patch literal 5350 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 literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/master_highest_inum.gz b/tests/ubifs_repair-tests/images/master_highest_inum.gz new file mode 100644 index 0000000000000000000000000000000000000000..8912bbe3adc56135a16ee4a26718f8c53c7cb870 GIT binary patch literal 5034 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 literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/master_tnc.gz b/tests/ubifs_repair-tests/images/master_tnc.gz new file mode 100644 index 0000000000000000000000000000000000000000..f62ef22feaf880ee83d795d29a9b7d3fca61506a GIT binary patch literal 5024 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 bVEs65dSS``A%f6csFUy654ha1hL1fAU literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/master_total_dead.gz b/tests/ubifs_repair-tests/images/master_total_dead.gz new file mode 100644 index 0000000000000000000000000000000000000000..90a2ba266562d58b7e29f52d907095d3c2b2cb43 GIT binary patch literal 5033 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 literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/master_total_dirty.gz b/tests/ubifs_repair-tests/images/master_total_dirty.gz new file mode 100644 index 0000000000000000000000000000000000000000..2286669f87a908dbd409fdb988ae2ddceb6ad03a GIT binary patch literal 5032 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 literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/master_total_free.gz b/tests/ubifs_repair-tests/images/master_total_free.gz new file mode 100644 index 0000000000000000000000000000000000000000..0394a76baa38bf36eb64df3ff4b725977208d7fe GIT binary patch literal 5030 zcmc&&c{mho*H=B|DUU>?Nb?k-QZn+4HEENj>?F%nj5XUZcBT@FWD8+tyks}1m>K&N zGFb-M24hTOX6#}NX8)e=eXsA2=Xrbo`TqF6`>*@Df9E>q+`n_5>ptfIl7IbmwJ8ZA zvd8a1a0mnn4haZ(@CfVyg+N4>DWbO0Bx=_>W$)f!q^%_N?tVI8Z(FST@W$ueQntVB zl0T62@J3Q==k8N?KS@QQ?;k=NeR4gOv{%MWUGl}z<(3*fF?lIBWZ(uIUl5#4$!!dy zH*WX0_vjcdk2YP?s!&Q@rgYFLisMrn#ugirgiwk}&t8$AFL1RiOZan0M7n7=OE@%8 zA%q_}O0ykj@A|pi4)_Y+@aK?7d@2Y2AD{zN(wGpx6rh$xM;1Q+@#yW;d%mb}-&vQW z@|Nr=4Y`xz(~_Dd&|XvMKa!N*J}b6(u5?T45g+F?>~rh%Cm$(s#TT6fr|jyJhNrr< zT;%gGt9&znQ{4-n+I+iMlCGTt@SXSbwm}YGyH2zRNH(FZRBCs(!Pi=gx)XUWkRD_tJLOV*Vv7$LTonGxn$7Xd z{Sp;F2Bn93g&!a1^=KWmm2^GsG&FSOyk;Ye(ck@II!KIb8tDOt`bg5~M?!c1(`2W^ zIR4*x|Azl2PZIjZ6elMvc5NwC;O1CD0+I;L(&B2IHL^7kJMKUR_AafV?7D4Tg&tf| zaO{DIHtNGntn6Vdxo6;<9ioc<jWi-`Cq3cLk(D@6G zdPzpN-{5g&zj4lyG5t%0if6Viald-OYtvcrpDj^kGz4zp^fUXacq7`j&7j>Y3pOuz zDUIu|@KOnG$PhLh6ql!^ggLCI1=8{_-W1$WUge*H$DV2#W8du$W1}Xj9UZL4SCzWq z;7vqSr{ly0!`imahpey*aZ|>ToCcZbFxCFBqP48IoXT1L%{7Tp?wW5`)THpH(7KW> znBhM-$^Q@yW(vl2xx5r$J9aU0*@C%R_=u#uR>aAGToVo1+-99%6|%JTznmGq;??GO z)Y%no+Y40>7>TM{iwt`567ACKCVV=c#Ma1JLgT`=-?%_w6(Zx z96g7|&Es;Xy!qc2+p#4|LP2h&9p&ak{~h+#O63Z!O`;?!&X~^H{#9YySA2Bc#BNfo zvf_mB>3R&2M_4%qeqXxC63z&;H;!#5F1EzpZd*<=u~KfwLIpHtnXb@}`Lxmm+lc1f zfeF;-`rkY{d;FE;zD$y|5KGJGPCxJm>LXgG19H?67r#*?E`cm+MMjzK1}m5AQSVy+B)@XV!qPZGj&}6&HUsYp7t>9bYD=J@h57*ASg(a^B1HM=9%V^L|39~aU8yo138XTRL91K^eut6=O2pm%KlSRBQ%Q1;kQj6{xaFSUGDN(N7b%gvj6Fs0u3O$UVdn!nrj9Wq_-en zn5P>#)?T18RBT2H&iM||xJ5~-K7Ls+?8eekBgEj66n5oV=!dW~TJh`+t7EmL7pL!M znQ!nmnBfJJ!-E@pW{(!LNfG&lh2__5#~#NLo!e?H`c0N6O|{{lVBBnGIRdwrtFl$c z`N%rZ&*ZKjad3ZUGf`Gi@@5Z2p){Hr>2iag`C-e%tYNx6eerX3eA`mIK&~fP*2dj_ z>~PQau|-wjIp4|Yff9Sc@pGDpGo|HDbq*6Gu<`p^WY6VHsid}^yx;vE2;>-Rni-7W z9#I1;iD3GTAVcwtv#a8x+y#{F*M55lI3V{SSUxMp*gYwzYRvq|);8$hLh#=Q-|%zf z5usV~FEkH29q`^>0K!W3rqQG9ns^KNL;5mY^J!zSqd#xeEL{W)0BxtbG#qO2%70(+ zPBXevEv~pQ9yw!^Zg<>WM%3}Mk$q6w|MgagK?~D4@EKbGTIk@gQp*UZ6+Yt#16J{& z0kWY97B~JMeEJ_Uc*!gwu-kJ)2q42$Owi6hjev*<4}SH3^*w{1aNrA!5uu^jOK2pC zdN&WgdnGmGD|?tKQ9j`l-&pAS6)G!Ll_k5C>wWg>_}M>FHspNIqDK7t^iE{Ym)J!N zr&hH(Cy)!&99uUBEOsZXrRaO>)ed~Fkk6s&>HBmn+*ruD*9Q+rL#J+5&upE0$ z`E1f}L!TKQJfFvG_BHn}#VtLH_x(8NZ{smF^@hfCT0Ik&Q!^XD_Ng93LT0c#mEMij z8Wx$Zd#UH(0au3)EaX9~rF^SHUXHmo#X#z#7)FZ6t3Z=whd+2+E6Kf3nyFv|_Q>OJ zbd?uyL-H@OK$%TDdv8Y;#{fg;>Yq^G3Prw&eHyy1BK!Z0B4? zT9YT<-%bUmn_!^VFCL^pYS8*TPwXOlYaP5Z);*T=D#D6U=(h-%Nr59?zxGxDUL*#sUX7AW4 zbmU#AZm$GSNQdq)h>0;LQq^3bRSS)WLlZ;$_UFqAh9Vl?zW2+qmaLL@w6D|ADavZg zX`X$$xseV*DvmB?>+1vm_?|ZgBfeNzxdv3gQNRHY9US?K(s2#W^3-o>Y&qJj*^Ond zA+I|=#aOq}F%~&hEmZ;v(tqPqsyW+Y!=owQbUG!KfY+I#`rV4O0eIHw44|CRVeF3+ zPGWMMRTABm^KO=Y9_{`TRm`@7HAs(w0lE!`l_G|)3(*8C_iO7wW*OpL2C97kiNg?%)hjiR~eS8fUFt%G4J=j z-D_utCHZ5*$N*~=!>NgLf!xx0mg07Gt=z~?@TQbH+WC);7~=C>xd5j&=Ys6X+t7vA zxOAa59-RQ>s|+i@arRpu?tC~#8zLZdq(N)leiOmlrWpk=WPx(1bCCl{$z}U7d?4SC zu)KnFkG>ezcZ~dTOs~hF6&BpOy}Bm*dZ-@fLQw+xQ9cgFa?u`>y}+@R-kzSykT(CN z1PM7??S{1x1T9NAG(bHkFsFKYp=+{#m z(Sf-0{aUI;nKQG}k*7XfBB~G2&p}oqU&Rfr$d_1t4)^e-7<*n1W7vkddR>3sGhoKfAee=hoQ)6!W}<8>HTUm3*J|)0DFsDI^RgQt_kWqq*ygR$jQ7n zaE#gc&}R6dJ!W{M^3oUGt>!YWiCAj=>d99+M_j1`VSx(wBFbD|L)L@xW>27VweY^+ zR6+iLG)beyH?2W&; zh_Wdn)HVja3q9wTOCQlFD;vL#o39$~XKv2#xu+KvkhWUD>MgA&C`xVP&ld!*!}Kg> z573&mo_i@+0efKYz_Tm8yDjow1#Z82X9q;vey^;VsU3PnY(PSnKNor@V-D-qqwHaW z%%p7MQ2w|YMN`WNbO~Ga1X)b_=0gG~XPJu)n>t4D9@t0XU8v>m40m73_0)O#x*#{@raJlvVp<<#Jvu1!#CR2T z>jhliFnl>QD&<9+44rK53L{{x6LT>Jb^8ne_y7zu?ihz|mDp5!bjk5@wD(T&>+#1q z7sPt=w*NR5$Z~C5s;#pgQ<%_#dh|cNxw5+wFm)`Alf23bmJ3Q$a6PESb)#$H6lE&M zbTqbhw2-_w4Q29yWdIis;cbp1n~LrD!Ilz+0;8u4HZvl4LlHK9oa$T7);p{58|?0 z7ub|%_E}3!i~DrdF=|%APdgbVG5HYNd02(1O5*<3GTc$JSAOhTPjVzK4emOR`7k_i zq@D1zt35G$Ywu&^ps|G(Pvf7Vhwa8%fUn9(7^uJE<%h@6H_m2YCV zUe6;XewQYx$|w~XJ@LAJ?fNMz)sTCmGWSwcVY+hZaPYPH#Dwf3Boj)6bLksH0#%Gpvd<`Za+~@y9wjUykp z%!R}WrKmes%4>%r&j1>l_&d-Vvb8+`g!mq)zC`Xg$&6K5^IYtTUr=B_;p81ps!fjO z?)j@Jo}3{6ZS@Xi?EgdGVtfd=XUTD(D z6_6>>;LvpvT;d^{<$A=Pm36iPN7<_85G^OMr59Xpuk*U-7*Zfu_#((9R%FSFW@pRy zhUZPECseOIdpuq^UjN6_ca`tz%HQ7+He%U#^ZNzm@-3^hZ{0P$8*8lo-sWSF>4ATz z=i16Lpn?Z&Z;k)+qlz&c)t&i2Klc2e{|D!87Wewjj4FK~D&e0zsu05|OhcaDeetKh z{QtGE*Qd03%(q|OD=feF|DkRBbPv~lUp-%Ke*W1xGppDBN(?Wp^Dg~3?N#T^R~e?8 zf6MpZ+p#+IEKlg-$)Tk`UVeMO_^Wd0%YJkxh8;O|=0AVcGg0Ng?DyZ)e!TI`S6Erv zZvWq_W$&LHIW+m$tWf@6`D>nCKcoJ+f9ve4S=SepP!y&x08t~ z|8vt{{_npd8`sy>{Ox{!PItG}ip!d@AkS4U{r`^<$(O4SPWt)3YDwL$sAqrvgFUu?w$iT8g#qm?r;1)@B6m=SrU@_-!`8tJ-c(| zyQupuYx2*XH9fxd(tL3wYd}nuHD~_RXaC4}e*N4b<=yY!-K{S8_OJi*G=Q4($l=N+ph7fm5egpl9qAy z!mNd+&eRoHv+Y_a(64*0gg*a&{pkompZfE^==NK6+q}(nrqk5&jI%p_KL0QN zcK@`mf7$!zSAO39cD93YkKX@{8#HfKC4(2SwFvi>E4X< zcP3q*QCd< zSKp;jV`hz;w$13`*#6&}opnCA`Pu&LXZx?u`}Iry*VDP)i}wmY z`~N@O>;FI0tkW?2B-i=>{Jb|dE&TuB%S~tYS3lnu=ie>gWB%VZQum)a<5GL{jP*nR z4lo4*6%$|=}0G3jU9EMj;Si9wv@K!8WKZkjWxuS#vEx&tA>hF;t*6(^Gsq6 zRW+4VkRXV$L6B;MCXxK_Iq#?Yo^$TkyT0u8tlwJC-fKU5?Y;I-HeuhslhyI=djw!E z&K{5a{NYdbtWEESh}y{ZY&MCXIAUR-Kh>!iAmBKBVi20dlT?zY?fGYUN+xAZK0@S!ytc$C= z|HZBKa4{hC&)By(;Q%mr)X2!diF#r)-0%JvPvIXAAIQp%c;><*+8`E zYE)vtu;sX=P4C6?Tk*#}A9$k(VAX3r+Kt3y}xSK=R ze7MZDiWDu-7-X4xuHX6;ZxQ6b1NOw)#4VI+Jn6qiaal;#@OwIO`?Zj#QNu%Obq6S%|9W)Ttlm)a@Tx%e4so6mI7xB~IxH_l9p!-Xv?X@fK!OHEmTtNK` z80PkG$2|C@m1L#R<*$!U%SH$t+V=yEg00RhAzn_B^N2I%`uH2%+m%+_=5zzmsBF-S ztpWD7?K;2aO|UL}jvlad{zqF0{G=1H%=2!EVr6ua8WJUv#Y*dGT3mm0?rkHS%c-^i z@>qr4$tdPbea}i^fn`ErLO<2K3(~F|#!aCor?v=-eWViDs^q+zU9I$Kh>ACM_sHi2 z=h6NdrTOg-TQkdHnlR>c;Dg%w`q2%!MLqFpT?+jYYJlK#d0dJA^~zVzV&~+L&LVwS zYjhi7O?9k&Mq?}TF%?+_Ycslq+;A||qN?VIM2wX!MP$=lS@QBxQAXZARXyAFPem33 zD}I=HUsgCd%HVySeTq8hfSP_L^ScM}yA82>X-3J43ij;?cb)uw%f&H1oId6fi^tLS&>SgqV}LN3`xn8!ngQ5)y{V>Q?-X| zqVkDHSEHy=uc%M+!nj;R)X%~X+pLoM&&H)bNd5ux4v2|=G|+pmp`HLFa$On5Q?ipx z4v6gszL(UHGWlaSfmx&jR4|{f?(=DF=U7DW&A*w*cq$^KlpdJOg!Z*e<{kvrc0Ku^ zf)MCBv+N*VPsQmBH7gTnP{dNk(kAC&mk5B?1RuH>80P!(&c#hCfl?f{fhp#vS=Vb{*8HV@4%53{dpJ zz2nRc`}JIc@&m2#YovDFwC&K>FZb2~(Rg4qOIGt;TyVSR7a;RY2JlFL^ixAIxvH8S zvBdo;N~>vCS0%6cexcV$zM$gg;@o5_=3i1+e#TjD@!lq}`(=9Q1c2q6{Y!Lg;p z%`=6rVyReg0kd!KZ$SurMU+$Si|a%8D*EKeWeJGW-ln`J$B3)j-C`r7ll^e)JlnLj zuF~!f6zqioX%x1rIp4G=mnl8)FR;C!j1R>;?Q%GE{X~%TAJ=3yt}i?jWY8qI1^@Qr zE+Q!SK240cd9ad_g)s`7@$i$K?x{&;iehN;WQY5yoi=6W)ElZoLDC<_abF--z&Wz6 z#2p$pve>ULo!CB5z+)}CqQAPO)Ax7l!p@p{G<{g_b3C<3sKLxV-fuc>FImyvZkXAQ zwMW<%s&V_(Z@wh%s`oSMj=&7-eSYg)QDVMt%KgPAGeVym)%>2A2qUf1^GI6_#8pZe z$q^Sk=w^vT3jA&J|1|JTXH0nb((!T37tF4?eLwQEZNMvUtc?%4h#xaM7o#<=`yr?) za0Bh~sPpEGETc;7YH8=u7ab4kN;p%d(p!3{_HuN2zuf;?G?T|H1`<_LWMF(4y~);eH^43vfdI8-CwOWrZlpeg1y%p5i(sD*>>cYh!Ut z@WLk!d*BmC$%tac%K-z5@A=&Ivz0&xy~Zv)NQeahm*zRtDd!JS>P^uc05}oI179tH zQ*Up)wNs9-AH|}qykR|oSj=Fn~}EYZ{fa#OW?H$;xw(B4JTy%ULKwS(UO^4PDK~W zA))R&Jp-u7H+(Cm1bG`gQT_2@KvsC$Kv6rGv9Y5=gi|ouFuAE(D@x(er39np;8%BM ztk_8u-l@t2dq2PTK*u{E<|&1j(r?nX>ZrwzeoRh_GV(8vcM5W`8Vocwy(Ux7khoSn z@Uu_c)-8;m0~=q9BD@igKHRRB*DVZehb^v`Y$MAO%>S2)Tv?6>Uc)?p{2L7d`4X}HQ&YtPs6hqlM z-YaW@VTPg6jXxvcm6}C-&6Z)DYl^CaA0@C*(w17W&tt+%d?o2f0vIMiL8;Av;fWo*b^KVLSg38A0eWJpQY&9{8AKFhRsQuG+RUKd2#khNVGZdR`MT^S?w zh%|55Yd}d`6FWLWEe@cN%g5^)^Yr0G`ug@69Bw1Qr0TaK3{7gfxiCb;^p&P(fD`gb zcuTR#jyhhkE~w&tL~!fGOR1vS-eQSx(PIOj%6+B+>{q4qcTA$0=t?cAeOt=Z-@Sd* z*fB=)D{W%bZeN+*$05#)XDg=9wV_4RO<|=oE7CnzhwAT+N@v(y>MiHI9n6Z9HvhGS zwf4PlGsX=!l6qgm9pW$@suw^Qhv6$uqNkw5T9U-^OzY|6d(;r>42QtY$V>wP zs`>g&^w!`Gi}P`r2*IT&=f%~CXdzZGi=66b+(fQW5}_2U-5J)6D|!?xOGSDz_d%q3 zQygL^UzC8b__$`NgsZX5Qi>T=(wc9BwR7|{yOE0|?I-uEECs46zD%Uf>orG>T|3)M zfdb3V;mXG&RNG>%bykE#S+q`yr&1iJah}5@M83DpshT;WAz8h-Y~6l))pvwzS>jK} zkQ$)DVZik3p76o_8ulN8rpR3i9X|dY6|fNjUH>#YAKJ{(N(Wp;|3(C~WGs5Wq>sFr z2E;a^e`aZ>@anI2^1l5tN00d;^+O72n zQmqfiw0oXVEp=Q3%J`bY^>t}>T;0>~ zOokEqv7N5Y?sDbf5r3!qR91yVh>mam{lAC%ibw&t8s_E|?# z8Xms+vG%EH?vO%0^>bL@f~J=-*Jx+r+x5cNAlDUad3kxi{A#mWqqkKc4cj#$X6xq+ zu3F>>jBvEuLt(z+Jvx2vJ`aX|YKFb;dDDr@GzGpdX1~?7F`wu`tmEp~fmtqw5;tXr zg=p5N-Zgt-#L`sQhCNQ8ZbYKgXx`j$X!_y)oWLL-!X?vh3Q`hN>lyC%R%Ff&J&9wF z!aExiN7`#Vp-?ixa&Ws9wj$3MKK$i_-mcoRZyJc-b=3e4x&O^KyQT2LC*-#cyP-`8 z(0DtEW&UYvJIw#alUT1(p}b9T^4Mz!9~A}$%r;aOP?S3Uo{kFqT`X!O%02a1Qp3oT z(n+^6DZu7S%U)=GH0L(obSyI;SZ9e7teMdQGE3f_z%7^(=+sl&D)l`5ng$Tdh z*?V^>(zwJ^Z5oJ?hCqoDXAS1594~PtUpqDGPJTq%;63V{<<(#>aeCEzIZ+eK^xNtNpE4>VB&I@#(e0};ZMHbwv%c`!(b?-j#z}Lmm2)#lope6u~1x!{>av6GbYYt z+*d05>%{rc7#L6f?Agj3f-TBm|`n#n=Pq|dd z$nx+yJ1v^PZZ?z@>e<+w8X;cq)2Os_dF;{kC>M+}@lUsJvfn}&Tr2M=d*zvsq zx@9N?#>}bt4ZG9&*NaBC2M)Aq1yNiGWvQm?E+KGUP^0sU38p9N?%jPY3|5$Ci;OLA z$mtT2|H!tV*d`fk)|WF;4TZeUrgz;(s_7yf{k!~d+-P3_6Eqaz-|Y<-7S;+s8dPa$?i5o6R zD_jvEaH!Wba>a=y?)m!04#69`?6=`VtD6YPnf1~IDW-8tXWX36XT)e|hF5Qj&%u5V zo46U3@$j!3SnwfeCfGh_yp$dnCoYDi!}xr2d?K%7qqPrnrBtXgwRVA5H3jjt87ZTD z%Yk_|*u$VZrAEPmu7D$VBw6QZ?!=e&wo)SN0QZJMMOAY%KV3#|Gh>)9OaL zcJo^O1$jmEma0mVo+T@m2TZo)CST~fE<9^xY+`lkT=AWQp!kP^6AA^wVvmbP&%Jqn zOZ&tYEhWzSgxH-Ur^J>D-^n$f$g{Y4$1p}H@5n9fw}R5mqo+lrUqaXRk~<9IooWd} zQEOp4Yd9TObgXzgfi!B8b1F0R{*%a&$J?y-p(Pa6`J&DbHCtV^DG+=sU^}mcC!bW& zPM%H!9`Z1zQ+2?zoo+^`41d&hmUM#8oIV3^*^skx($xp zPYzce*NalwM79f2TKaK=X@-&s`{(YCR%9@ZpfVO5#2J&fAklkpH}AkKmqv1KnSd@Bjb+ literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/sb_fmt_version.gz b/tests/ubifs_repair-tests/images/sb_fmt_version.gz new file mode 100644 index 0000000000000000000000000000000000000000..31070a12e2f63f9c0f90ec8bd0790783e18f0ba3 GIT binary patch literal 5326 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 k)w%fPe&BCaUE5j&e)?-dMEUN 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 literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/sb_log_lebs.gz b/tests/ubifs_repair-tests/images/sb_log_lebs.gz new file mode 100644 index 0000000000000000000000000000000000000000..4f74796ef32f96d688bb3b8dbb988682a1122fe7 GIT binary patch literal 5323 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ⓈR2M^Gc;ZhSV$4I9a>Mj$k$PVy&;2e- zOi=*bKCO+Ei~%fhb+TQvYzP!ldoTLcK^GSi!MP{IQXGxHj5=8X9t=xY)0lRSX9k1J zRKcChB7-s&_idP*W6nFfVx1N0U&x;*pd+^jz!$AA*vFP?L(#z(V7&YMo8mk8O;(m6 z2w9aw$`m_l^=!E~QU9}4&B%tE@5lIdg$woast{3D=&5JZ&mQ~{nRgMi#DIXI^s&73 zr)B+b8mkfzINZbO?0o2uKM{Sm`YUh@pq5pr|OI2tf!Sy@N;z zp(7%lNPq+gB+?8JdI%v2$^YGZKi#{#_v<^K&hI(T{GK!A%$ymyghPjhs$Y5@;Dfoj zLVN>VeW9)}-$>5`t22k~#cbtzwy+W>k6Yd}obFT%;&UE3{!{QBE0u$N2X9=r5qQ`Lr$y3or-441|L zm78K%rI=SiBUTeuw!N1w?7S5HD)>ebXwaxBGJQTKvZL_J*-O_EP8Rz&duwR2e|nIXAr!CdOt_uH(B_^O7%!P<5x( z$2;)e{-a_@V&a%Ywb;$fvJR>?#hd{&S8CQ1IFu|Pa!}&z502j12*}~m8AshJQ&@$g zj+=J>Jet1yo2VDBtcs`{zVz+ES-B_yp+noKB-jdh5%Fw_n2RS{7`9*M+^VwXG^O1X zi^f-AT0`dv{tHMYV1_We=P5vQb?$FlFe@SC>y?!`6b%U2L5qehC^bqu)S%R(Y3|B=8ZJN@Plx{>wo;vnBkE_=C z;aQ6Aux(5}USuVP67!t$C^v$`F-qDiEZSw1)_uKG=8xnF5}Dfc_6GyKruB6=;1$Px zj9PYCo6~iTiV!`Q9O$uX0qOj2x;Z}X5{d`=Bb<` z!0Ns?PrD!tvPLgI(r%#Ya*mRj0n{rtkj7J|=3tj`fX*ZjvJe~reaLv)bHqSyT$w45 zfyqIp?*@Mggv;1i_$iCDm(=a1jJ**)@7guMn{F7ZgC98-d5m?+ZMd7}G&PQz+L}Xo zSH#E;UllR2~#bIw2-*H+|P{ zfc6HH^TlYYZ98(WWh%17mZjC@7FM91%%0DQw%?14JJ}ieP-Dk_^tK=7_%_jf2vkdt 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 literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/soft_link_data_len.gz b/tests/ubifs_repair-tests/images/soft_link_data_len.gz new file mode 100644 index 0000000000000000000000000000000000000000..4fa20cf01fcaa5f0145bf4b2639d89ca0b9184ce GIT binary patch literal 5389 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 literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/tnc_lv0_len.gz b/tests/ubifs_repair-tests/images/tnc_lv0_len.gz new file mode 100644 index 0000000000000000000000000000000000000000..1cf0d794741448ae77eab6e047db3d3e315408d5 GIT binary patch literal 5420 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%0AE{Yf-xP4nh0-ThP?jRwI5%XIzMsFm`j*YG z!uKb?r&)swe5jl2Uj&Yj4d}tg3KhPW2U;eI;cxm^Sv8^ax{%6hU5~=y6bS@jPZ91raVE>Oyo>rh#=eJ#bZSA`2Mes`Y2r|AWTX@8s$ySVhI z*V|MH5r*mHy6w?X&6EobrKQiK_?wX>UnDX>- zU-K=l>dU$_MGR6Ihg0du82NfX2PpctuCDDaVS##gy-G|S8&yx7C|D_x>+{EqXb=L) zgPA5>^(8Lm4_Nt`VR_Id9b%2q^(}F0jbfo3DPK^ff|c**&lclfg>~n7OY!2#Q>Q^* zGUv@$%Sr)3zh(aMR{ZqY{8yGf^~?&}ftE3-{L!n80UO^#YS7~pFNcU7CdRx#1D900 z^7f9JoEC7P{Z*CKIQUmRM{4h0ZPo+>%BO_gRb<&Gg1P#(7#w$PZ~m%{6xdc6K6u*# z)_@CJc;b3(_F|MnakC&ORQr7S!wNvY};z zZ+Av2lolZ?Ys2PO58< zJ?iLmfyA{Qetq%Jy$y&{N>0J8@?X@>`p9t=lDuV3t=QFfu)c{u?2Vm_TO67;o5x6+ zgxl9upgzx5fXyE9R{zj9pu;goXO};DJO+oYCba%x4J=&n@S#bvZPZu7zR^I)t=x0Y zAmapwpUYF8rhC2igLWuqEgYp3Ci<#Yy0vhRBBtu^)P(R8z3zD*h^Go`hY8;j9Z~kF z8Y7JX4alIXXsDRj62j>!C%V^MqJMBX5)#|4zO2o(==xHUepteAOqW;IOr>6iV7`Zt z;=)>n`3bQBcgMXCANkffabw}qrx{K1kJzFfojXp!3&F;o^e&iBmH*xvSv?clx$kAq zsuKG@L@^Yw?kP|LDDX%s8_Zlh>^`HM^gV5$=VYH&weREm!IRT0)t7~r%rqQTR+g)7 z+a3V58OAGKc6Bp}xF9Nm>zmmHP)Z(Wd5kn&3}q&c*G;UBTWR5=!<>mq)7G9-?@>Pv zyFFLpWCQum63ZewCT(lZ*LbF@u%hL|WR@k?+PsL674ZhG&6_Lyk|tDCI#4fk8%J>q zhonoDm3$YPeiq3hyu$H>lnTLoYXuOZ7i9bDxrA~2u3f4M!@;IJ!nE!2_)%Mb4&%v^ znQL)0MJ2r~kLEc((Y2D~SiyX2r?ziltb8gdwfBmDR5)oR+`!CZ0l8M!0h&F-Dk=WP%w}b?%2@L#mVvzG9SBMP zE&nV+(94z_9iGz$6~ZOJfnlT1L8+$gPt$e7eS+%zT?#Mo?jw5=DR`n1Y;tRQc+=P9 z$cUQ0lg{!C9=8{f)KCG_&`FuB7)yr=dChBFBPI-X6&TCNi7Zf}(={pPPFUvJauce~ z@gCO!rSU&N$erOOB2b+Z0;q|w@O%M)R-(xr8? zdvw1ZzWC{9US=X=AMTBLhSvFzuQhMVN0(G->t%)?a=qTxK56YV7|{yGsyjFs8X#t> zw@b$+-Zgo<5y1L9-dv*ja!w~MTfegDzAfiNPwd$p9^!kdsr1MuNu&?_M*H*5!TeKL zYSVyjaNL6jZDjH0+?xMr(cXb@b3h1p={FJZWkk2mh52{mOtfSD?}phyqBjr7$ejfo zRS(RG3k%$EN&{R8_1h#(Oe>h8ESs(1C}aD?&1_@h|f!g&sQck)Ly_kqOY5u66&LaJ|VdMc{yBhh&sV`ctn|| zy2AXM^Yu*l7VNM`?ZIx_wsYHm E0S~zARsaA1 literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/tnc_noleaf_len.gz b/tests/ubifs_repair-tests/images/tnc_noleaf_len.gz new file mode 100644 index 0000000000000000000000000000000000000000..e2c5a9a213891734c89d4042cdfe1a824b8b6071 GIT binary patch literal 5437 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 T%n#5L_Q_lU`M5)eem(SGOET8b literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/tnc_noleaf_pos.gz b/tests/ubifs_repair-tests/images/tnc_noleaf_pos.gz new file mode 100644 index 0000000000000000000000000000000000000000..60cbe7a71b18b647e1efeee448172853887de9ff GIT binary patch literal 5418 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 D5d-{u literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/xentry_key.gz b/tests/ubifs_repair-tests/images/xentry_key.gz new file mode 100644 index 0000000000000000000000000000000000000000..d2ff24989fda6ee8b181dfa403403fac332cd19a GIT binary patch literal 5378 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 F{1@wnu+abj literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/xentry_nlen.gz b/tests/ubifs_repair-tests/images/xentry_nlen.gz new file mode 100644 index 0000000000000000000000000000000000000000..96215b7663446b9b1934f56a08fa5a765dfde49d GIT binary patch literal 5386 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 az~47MY5YG3zz2cAZx=l!Lig-Bu;<@2Ldw7Z literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/xentry_type.gz b/tests/ubifs_repair-tests/images/xentry_type.gz new file mode 100644 index 0000000000000000000000000000000000000000..71ef8d9d66b102504bd02c76a271d1f8034ea24a GIT binary patch literal 5386 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 literal 0 HcmV?d00001 diff --git a/tests/ubifs_repair-tests/images/xinode_flags.gz b/tests/ubifs_repair-tests/images/xinode_flags.gz new file mode 100644 index 0000000000000000000000000000000000000000..83e2a10e270f67698d7cb5c3d5c8971a0789d30c GIT binary patch literal 5384 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 Nt?2w(KwzK1e*t!Xu6F>EHJrGJl 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 X-Patchwork-Id: 1880646 X-Patchwork-Delegate: david.oberhollenzer@sigma-star.at Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=rfk6SK9n; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4T0rg73C3Jz23d7 for ; Thu, 28 Dec 2023 12:35:31 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=3Qk6HAhm7cszcotHjFjUD93iUscKsokbHXeB6KaanSQ=; b=rfk6SK9nb3PtXP EDnb2gqioFuJU5xQuA8qUGML3xy2OQAML9X09z+iyQ3GH+81AuNdf4uzHbao+p78SfdC5QPOxUhEr TwGnuiil0DLvZk3Dgz6AUOOWQOsStOE8g7qEZYrn7GpJPYIc2ceH85Ada1QVJCWzCydULIYXpv7TX T+8cM453xWXqW6iArq+LCWKr10PCRNUq+Iaa7PsyJHvoJPnlC8EkaN38RUifB/LWSyzrnnJEo3HqR gGCL7sF13kCRACokdedWDXOh1DsBd3jsn1H/vjBc45FXTxWKFf/ZceKoDCA/MCXSNbxyN7kiuSu74 RoUCxutU8rKHzxjyByvA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rIfIZ-00Foe9-0z; Thu, 28 Dec 2023 01:34:59 +0000 Received: from szxga05-in.huawei.com ([45.249.212.191]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rIfIT-00FoYZ-0M for linux-mtd@lists.infradead.org; Thu, 28 Dec 2023 01:34:57 +0000 Received: from mail.maildlp.com (unknown [172.19.88.214]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4T0rcq2dZfz1g0nR; Thu, 28 Dec 2023 09:33:31 +0800 (CST) Received: from kwepemm000013.china.huawei.com (unknown [7.193.23.81]) by mail.maildlp.com (Postfix) with ESMTPS id 66EB21A0195; Thu, 28 Dec 2023 09:34:36 +0800 (CST) Received: from huawei.com (10.175.127.227) by kwepemm000013.china.huawei.com (7.193.23.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 28 Dec 2023 09:33:38 +0800 From: Zhihao Cheng To: , , , , CC: , Subject: [PATCH mtd-utils 09/11] tests: ubifs_repair: Add bad images repairing test Date: Thu, 28 Dec 2023 09:36:37 +0800 Message-ID: <20231228013639.2827205-10-chengzhihao1@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20231228013639.2827205-1-chengzhihao1@huawei.com> References: <20231228013639.2827205-1-chengzhihao1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To kwepemm000013.china.huawei.com (7.193.23.81) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231227_173453_536961_21A8ACCE X-CRM114-Status: GOOD ( 13.52 ) X-Spam-Score: -2.3 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: For kinds of inconsistent UBIFS images(which can simulate corruptions caused by some potentional UBIFS bug), check repairing result. This testcase mainly checks whether the behavior is in expected aft [...] Content analysis details: (-2.3 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [45.249.212.191 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 RCVD_IN_MSPIKE_H5 RBL: Excellent reputation (+5) [45.249.212.191 listed in wl.mailspike.net] 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org For kinds of inconsistent UBIFS images(which can simulate corruptions caused by some potentional UBIFS bug), check repairing result. This testcase mainly checks whether the behavior is in expected after repairing specific inconsistent UBIFS image. Signed-off-by: Zhihao Cheng --- .gitignore | 1 + configure.ac | 3 +- tests/ubifs_repair-tests/Makemodule.am | 3 +- .../tests/repair_bad_image.sh.in | 274 +++++++++++++++++++++ 4 files changed, 279 insertions(+), 2 deletions(-) create mode 100755 tests/ubifs_repair-tests/tests/repair_bad_image.sh.in diff --git a/.gitignore b/.gitignore index dbe63b7..89bca58 100644 --- a/.gitignore +++ b/.gitignore @@ -119,6 +119,7 @@ tests/ubifs_repair-tests/tests/powercut_repair_mount.sh tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh tests/ubifs_repair-tests/tests/cycle_powercut_mount_repair.sh tests/ubifs_repair-tests/tests/random_corrupted_repair.sh +tests/ubifs_repair-tests/tests/repair_bad_image.sh # # Files generated by autotools diff --git a/configure.ac b/configure.ac index 11d34bd..1c1c95b 100644 --- a/configure.ac +++ b/configure.ac @@ -361,6 +361,7 @@ AC_CONFIG_FILES([tests/fs-tests/fs_help_all.sh tests/ubifs_repair-tests/tests/powercut_repair_mount.sh tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh tests/ubifs_repair-tests/tests/cycle_powercut_mount_repair.sh - tests/ubifs_repair-tests/tests/random_corrupted_repair.sh]) + tests/ubifs_repair-tests/tests/random_corrupted_repair.sh + tests/ubifs_repair-tests/tests/repair_bad_image.sh]) AC_OUTPUT([Makefile]) diff --git a/tests/ubifs_repair-tests/Makemodule.am b/tests/ubifs_repair-tests/Makemodule.am index 6070b0c..f728823 100644 --- a/tests/ubifs_repair-tests/Makemodule.am +++ b/tests/ubifs_repair-tests/Makemodule.am @@ -5,7 +5,8 @@ test_SCRIPTS += \ tests/ubifs_repair-tests/tests/powercut_repair_mount.sh \ tests/ubifs_repair-tests/tests/cycle_corrupted_repair_fault_inject.sh \ tests/ubifs_repair-tests/tests/cycle_powercut_mount_repair.sh \ - tests/ubifs_repair-tests/tests/random_corrupted_repair.sh + tests/ubifs_repair-tests/tests/random_corrupted_repair.sh \ + tests/ubifs_repair-tests/tests/repair_bad_image.sh test_DATA += \ tests/ubifs_repair-tests/images/good.gz \ diff --git a/tests/ubifs_repair-tests/tests/repair_bad_image.sh.in b/tests/ubifs_repair-tests/tests/repair_bad_image.sh.in new file mode 100755 index 0000000..ce9cb70 --- /dev/null +++ b/tests/ubifs_repair-tests/tests/repair_bad_image.sh.in @@ -0,0 +1,274 @@ +#!/bin/sh +# Copyright (c), 2023-2024, Huawei Technologies Co, Ltd. +# Author: Zhihao Cheng +# +# Test Description: Tests whether all inconsistent UBIFS images can be fixed +# as expected. +# Origin UBIFS image content: +# / +# ├── corrupt_file (xattr - user.corrupt:123, 2K data) +# ├── dir +# │   ├── block_dev +# │   ├── char_dev +# │   ├── dir +# │   └── file (content: '123') +# ├── hardl_corrupt_file => corrupt_file +# └── softl_corrupt_file -> corrupt_file +# +# Running time: 2min + +TESTBINDIR=@TESTBINDIR@ +source $TESTBINDIR/common.sh + +CORRUPT_FILE=corrupt_file +XATTR_NAME="user.corrupt" +XATTR_VAL=123 +CORRUPT_FILE_MD5=7d2f953e91033c743ab6a801d5ee6e15 +SOFT_LINK_FILE=softl_corrupt_file +HARD_LINK_FILE=hardl_corrupt_file +DIR=dir +BLOCK_DEV=block_dev +CHAR_DEV=char_dev +FILE=file +FILE_MD5=ba1f2511fc30423bdbb183fe33f3dd0f + +function repair_image() +{ + local img_type=$1; + local img=$2; + local repair_failed=$3; + local file_exist=$4; + local file_nochange=$5 + local file_xattr_exist=$6; + local hard_link_exist=$7; + local hard_link_no_change=$8; + local hard_link_xattr_exist=$9; + local soft_link_exist=${10}; + local dir_exist=${11}; + + echo "======================================================================" + echo "repair $img_type, repair_failed:$repair_failed file_exist:$file_exist file_nochange:$file_nochange file_xattr_exist:$file_xattr_exist hard_link_exist:$hard_link_exist hard_link_no_change:$hard_link_no_change:hard_link_xattr_exist $hard_link_xattr_exist:soft_link_exist:$soft_link_exist dir_exist:$dir_exist" + + load_mtdram 1 16 || echo "cannot load mtdram" + mtdnum="$(find_mtd_device "$mtdram_patt")" + + gzip -f -k -d $TESTBINDIR/${img}.gz || fatal "gzip failed" + flash_eraseall /dev/mtd$mtdnum + dd if=$TESTBINDIR/$img of=/dev/mtd$mtdnum bs=1M + rm -f $TESTBINDIR/$img + modprobe ubi mtd="$mtdnum,0" fm_autoconvert || fatal "modprobe ubi fail" + modprobe ubifs || fatal "modprobe ubifs fail" + + echo 'format "UBIFS DBG repair" +pflmt' > /sys/kernel/debug/dynamic_debug/control + echo "$DEV" > /sys/kernel/debug/ubifs/repair_fs + ret=$? + check_memleak + if [[ $ret != 0 ]]; then + if [[ $repair_failed == 0 ]]; then + fatal "repair failed, but expect success" + fi + echo "repair failed is expected, skip" + + modprobe -r ubifs + modprobe -r ubi + modprobe -r mtdram + echo "----------------------------------------------------------------------" + + return; + else + if [[ $repair_failed != 0 ]]; then + fatal "repair success, but expect failure" + fi + fi + + dmesg -c > /dev/null # repairing could reproduce error messages + + enable_chkfs + + mount_ubifs $DEV $MNT + ret=$? + if [[ $ret != 0 ]]; then + fatal "mount failed $ret" + fi + + du -sh $MNT > /dev/null # Make sure all files are accessible + ret=$? + if [[ $ret != 0 ]]; then + fatal "cannot access all files $ret" + fi + + if [[ $file_exist == 1 ]]; then + if ! [ -f $MNT/$CORRUPT_FILE ]; then + fatal "$MNT/$CORRUPT_FILE is lost" + fi + else + if [ -f $MNT/$CORRUPT_FILE ]; then + fatal "$MNT/$CORRUPT_FILE should not exist" + fi + fi + + md5_after=`md5sum $MNT/$CORRUPT_FILE 2>/dev/null | awk '{print $1}'` + if [[ $file_nochange == 1 ]]; then + if [[ $CORRUPT_FILE_MD5 != $md5_after ]]; then + fatal "content changed for $MNT/$CORRUPT_FILE" + fi + else + if [[ $CORRUPT_FILE_MD5 == $md5_after ]]; then + fatal "content not changed for $MNT/$CORRUPT_FILE" + fi + fi + + xattr=`getfattr -n $XATTR_NAME $MNT/$CORRUPT_FILE 2>/dev/null | grep $XATTR_NAME | awk -F '=' '{ print $2 }'` + if [[ $file_xattr_exist == 1 ]]; then + if ! [[ "$xattr" =~ "$XATTR_VAL" ]]; then + fatal "wrong xattr $xattr for $MNT/$CORRUPT_DENT_NAME" + fi + else + if [[ "$xattr" =~ "$XATTR_VAL" ]]; then + fatal "xattr $xattr for $MNT/$CORRUPT_DENT_NAME should not exist" + fi + fi + + if [[ $hard_link_exist == 1 ]]; then + if ! [ -f $MNT/$HARD_LINK_FILE ]; then + fatal "$MNT/$HARD_LINK_FILE should is lost" + fi + else + if [ -f $MNT/$HARD_LINK_FILE ]; then + fatal "$MNT/$HARD_LINK_FILE should not exist" + fi + fi + + md5_after=`md5sum $MNT/$HARD_LINK_FILE 2>/dev/null | awk '{print $1}'` + if [[ $hard_link_no_change == 1 ]]; then + if [[ $CORRUPT_FILE_MD5 != $md5_after ]]; then + fatal "content changed for $MNT/$HARD_LINK_FILE" + fi + else + if [[ $CORRUPT_FILE_MD5 == $md5_after ]]; then + fatal "content not changed for $MNT/$HARD_LINK_FILE" + fi + fi + + xattr=`getfattr -n $XATTR_NAME $MNT/$HARD_LINK_FILE 2>/dev/null | grep $XATTR_NAME | awk -F '=' '{ print $2 }'` + if [[ $hard_link_xattr_exist == 1 ]]; then + if ! [[ "$xattr" =~ "$XATTR_VAL" ]]; then + fatal "wrong xattr $xattr for $MNT/$HARD_LINK_FILE" + fi + else + if [[ "$xattr" =~ "$XATTR_VAL" ]]; then + fatal "xattr $xattr for $MNT/$HARD_LINK_FILE should not exist" + fi + fi + + link=`stat -c %N $MNT/$SOFT_LINK_FILE 2>/dev/null | grep $SOFT_LINK_FILE | grep $CORRUPT_FILE` + if [[ $soft_link_exist == 1 ]]; then + if [[ "$link" == "" ]]; then + fatal "$MNT/$SOFT_LINK_FILE is lost" + fi + else + if [[ "$link" != "" ]]; then + fatal "$MNT/$SOFT_LINK_FILE should not exist" + fi + fi + + if [[ $dir_exist == 1 ]]; then + if ! [ -d $MNT/$DIR ]; then + fatal "$MNT/$DIR is lost" + fi + if ! [ -d $MNT/$DIR/$DIR ]; then + fatal "$MNT/$DIR/$DIR is lost" + fi + if ! [ -f $MNT/$DIR/$FILE ]; then + fatal "$MNT/$DIR/$FILE is lost" + fi + f_md5=`md5sum $MNT/$DIR/$FILE 2>/dev/null | awk '{print $1}'` + if [[ $FILE_MD5 != $f_md5 ]]; then + fatal "content changed for $MNT/$DIR/$FILE" + fi + if ! [ -b $MNT/$DIR/$BLOCK_DEV ]; then + fatal "$MNT/$DIR/$BLOCK_DEV is lost" + fi + major=`stat -c %t $MNT/$DIR/$BLOCK_DEV` + minor=`stat -c %T $MNT/$DIR/$BLOCK_DEV` + if [[ $major != 1 ]] || [[ $minor != 2 ]]; then + echo "major/minor changed for $MNT/$DIR/$BLOCK_DEV" + fi + if ! [ -c $MNT/$DIR/$CHAR_DEV ]; then + fatal "$MNT/$DIR/$CHAR_DEV is lost" + fi + major=`stat -c %t $MNT/$DIR/$CHAR_DEV` + minor=`stat -c %T $MNT/$DIR/$CHAR_DEV` + if [[ $major != 0 ]] || [[ $minor != 1 ]]; then + echo "major/minor changed for $MNT/$DIR/$CHAR_DEV" + fi + else + if [ -d $MNT/$DIR ]; then + fatal "$MNT/$DIR should not exist" + fi + fi + + umount $MNT + res=$? + if [[ $res != 0 ]] + then + fatal "unmount fail $res" + fi + + disable_chkfs + + check_err_msg + + modprobe -r ubifs + modprobe -r ubi + modprobe -r mtdram + + echo "----------------------------------------------------------------------" +} + +start_t=$(date +%s) +echo "Do inconsistent UBIFS images repairing test" +repair_image "good image" good 0 1 1 1 1 1 1 1 1 +repair_image "bad sb fanout image" sb_fanout 1 1 1 1 1 1 1 1 1 +repair_image "bad sb fmt_version image" sb_fmt_version 1 1 1 1 1 1 1 1 1 +repair_image "bad sb leb_size image" sb_leb_size 1 1 1 1 1 1 1 1 1 +repair_image "bad sb log_lebs image" sb_log_lebs 1 1 1 1 1 1 1 1 1 +repair_image "bad sb min_io_size image" sb_min_io_size 1 1 1 1 1 1 1 1 1 +repair_image "bad master highest_inum image" master_highest_inum 0 1 1 1 1 1 1 1 1 +repair_image "bad master lpt image" master_lpt 0 1 1 1 1 1 1 1 1 +repair_image "bad master tnc image" master_tnc 0 1 1 1 1 1 1 1 1 +repair_image "bad master total_dead image" master_total_dead 0 1 1 1 1 1 1 1 1 +repair_image "bad master total_dirty image" master_total_dirty 0 1 1 1 1 1 1 1 1 +repair_image "bad master total_free image" master_total_free 0 1 1 1 1 1 1 1 1 +repair_image "bad log image" log 0 1 1 1 1 1 1 1 1 +repair_image "bad lpt dirty image" lpt_dirty 0 1 1 1 1 1 1 1 1 +repair_image "bad lpt lpt_flags image" lpt_flags 0 1 1 1 1 1 1 1 1 +repair_image "bad lpt free image" lpt_free 0 1 1 1 1 1 1 1 1 +repair_image "bad lpt pos image" lpt_pos 0 1 1 1 1 1 1 1 1 +repair_image "bad tnc lv0 key image" tnc_lv0_key 0 1 1 1 1 1 1 1 1 +repair_image "bad tnc lv0 len image" tnc_lv0_len 0 1 1 1 1 1 1 1 1 +repair_image "bad tnc lv0 pos image" tnc_lv0_pos 0 1 1 1 1 1 1 1 1 +repair_image "bad tnc non-leaf key image" tnc_noleaf_key 0 1 1 1 1 1 1 1 1 +repair_image "bad tnc non-leaf len image" tnc_noleaf_len 0 1 1 1 1 1 1 1 1 +repair_image "bad tnc non-leaf pos image" tnc_noleaf_pos 0 1 1 1 1 1 1 1 1 +repair_image "bad inode data image" inode_data 0 1 0 1 1 0 1 1 1 +repair_image "bad inode mode image" inode_mode 0 1 1 1 1 1 1 0 1 +repair_image "bad inode nlink image" inode_nlink 0 1 1 1 1 1 1 1 1 +repair_image "bad inode size image" inode_size 0 1 1 1 1 1 1 1 1 +repair_image "bad inode xattr_cnt image" inode_xcnt 0 1 1 1 1 1 1 1 1 +repair_image "bad softlink data_len image" soft_link_data_len 0 1 1 1 1 1 1 0 1 +repair_image "bad dentry key image" dentry_key 0 0 0 0 1 1 1 1 1 +repair_image "bad dentry nlen image" dentry_nlen 0 0 0 0 1 1 1 1 1 +repair_image "bad dentry type image" dentry_type 0 0 0 0 1 1 1 1 1 +repair_image "bad xattr inode flags image" xinode_flags 0 1 1 0 1 1 0 1 1 +repair_image "bad xattr inode key image" xinode_key 0 1 1 0 1 1 0 1 1 +repair_image "bad xattr inode mode image" xinode_mode 0 1 1 0 1 1 0 1 1 +repair_image "bad xattr dentry key image" xentry_key 0 1 1 0 1 1 0 1 1 +repair_image "bad xattr dentry nlen image" xentry_nlen 0 1 1 0 1 1 0 1 1 +repair_image "bad xattr dentry type image" xentry_type 0 1 1 0 1 1 0 1 1 +repair_image "bad dir image" dir_lost 0 1 1 1 1 1 1 1 0 +repair_image "bad root dir image" root_dir 0 0 0 0 0 0 0 0 0 +end_t=$(date +%s) +time_cost=$(( end_t - start_t )) +echo "Success, cost $time_cost seconds" +exit 0 From patchwork Thu Dec 28 01:36:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhihao Cheng X-Patchwork-Id: 1880647 X-Patchwork-Delegate: david.oberhollenzer@sigma-star.at Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=mOys1t9c; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4T0rgC1rvjz23d7 for ; Thu, 28 Dec 2023 12:35:35 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=mUyvCauD6QGL8QrW5HD/PYfIgA9ySTJ3f4u6emtrXos=; b=mOys1t9cEde1sX EK/LWKtAF7hP7HVeJQFEexrt5KpRM/0B6t0uQ01VDZ89axVzACIR/dLEDgbf+S5E2Lu2qVr8zgvOj sAOZ01cqvBUUIeaE2edK4SBwfDhQOPwnBG67KKBAL0gHmY9mCyyzQJ4rvgN4RWivzlpyFFnr2fLIO uPoFt/uGcaPEc8q+9IF6uVPepILvLXcRdHFd3SRkjsz6aok6QrS190mAWyVho1uer87b+U0444BYK pm49TieD9BXrt0HEcmA6Mdsf09x7LLJRihPJW794nzmOlqNJPu4UI9UaZh9pEl+WfHToZDn7pQEDA eXVZR1gylsgp7ztNCzoA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rIfIl-00Folh-1C; Thu, 28 Dec 2023 01:35:11 +0000 Received: from szxga05-in.huawei.com ([45.249.212.191]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rIfIi-00Foil-0J for linux-mtd@lists.infradead.org; Thu, 28 Dec 2023 01:35:10 +0000 Received: from mail.maildlp.com (unknown [172.19.88.214]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4T0rd630Bnz1g0DD; Thu, 28 Dec 2023 09:33:46 +0800 (CST) Received: from kwepemm000013.china.huawei.com (unknown [7.193.23.81]) by mail.maildlp.com (Postfix) with ESMTPS id 7323C1A01A3; Thu, 28 Dec 2023 09:34:51 +0800 (CST) Received: from huawei.com (10.175.127.227) by kwepemm000013.china.huawei.com (7.193.23.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 28 Dec 2023 09:33:38 +0800 From: Zhihao Cheng To: , , , , CC: , Subject: [PATCH mtd-utils 10/11] tests: ubifs_repair: Add run_all script Date: Thu, 28 Dec 2023 09:36:38 +0800 Message-ID: <20231228013639.2827205-11-chengzhihao1@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20231228013639.2827205-1-chengzhihao1@huawei.com> References: <20231228013639.2827205-1-chengzhihao1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To kwepemm000013.china.huawei.com (7.193.23.81) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231227_173508_501070_A95983A4 X-CRM114-Status: GOOD ( 10.54 ) X-Spam-Score: -2.3 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Add run_all script to run all UBIFS repair testcases. Signed-off-by: Zhihao Cheng --- .gitignore | 1 + configure.ac | 1 + tests/ubifs_repair-tests/Makemodule.am | 1 + .../ubifs_repair-tests/ubifs_repair_run_all.sh.in | 59 ++++++ [...] Content analysis details: (-2.3 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 RCVD_IN_MSPIKE_H5 RBL: Excellent reputation (+5) [45.249.212.191 listed in wl.mailspike.net] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [45.249.212.191 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Add run_all script to run all UBIFS repair testcases. Signed-off-by: Zhihao Cheng --- .gitignore | 1 + configure.ac | 1 + tests/ubifs_repair-tests/Makemodule.am | 1 + .../ubifs_repair-tests/ubifs_repair_run_all.sh.in | 59 ++++++++++++++++++++++ 4 files changed, 62 insertions(+) create mode 100755 tests/ubifs_repair-tests/ubifs_repair_run_all.sh.in diff --git a/.gitignore b/.gitignore index 89bca58..0d9be34 100644 --- a/.gitignore +++ b/.gitignore @@ -113,6 +113,7 @@ tests/fs-tests/stress/fs_stress01.sh tests/ubi-tests/runubitests.sh tests/ubi-tests/ubi-stress-test.sh tests/ubifs_repair-tests/lib/common.sh +tests/ubifs_repair-tests/ubifs_repair_run_all.sh tests/ubifs_repair-tests/tests/authentication_refuse.sh tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh tests/ubifs_repair-tests/tests/powercut_repair_mount.sh diff --git a/configure.ac b/configure.ac index 1c1c95b..94b60c0 100644 --- a/configure.ac +++ b/configure.ac @@ -356,6 +356,7 @@ AC_CONFIG_FILES([tests/fs-tests/fs_help_all.sh tests/ubi-tests/runubitests.sh tests/ubi-tests/ubi-stress-test.sh tests/ubifs_repair-tests/lib/common.sh + tests/ubifs_repair-tests/ubifs_repair_run_all.sh tests/ubifs_repair-tests/tests/authentication_refuse.sh tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh tests/ubifs_repair-tests/tests/powercut_repair_mount.sh diff --git a/tests/ubifs_repair-tests/Makemodule.am b/tests/ubifs_repair-tests/Makemodule.am index f728823..6030a1f 100644 --- a/tests/ubifs_repair-tests/Makemodule.am +++ b/tests/ubifs_repair-tests/Makemodule.am @@ -1,5 +1,6 @@ test_SCRIPTS += \ tests/ubifs_repair-tests/lib/common.sh \ + tests/ubifs_repair-tests/ubifs_repair_run_all.sh \ tests/ubifs_repair-tests/tests/authentication_refuse.sh \ tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh \ tests/ubifs_repair-tests/tests/powercut_repair_mount.sh \ diff --git a/tests/ubifs_repair-tests/ubifs_repair_run_all.sh.in b/tests/ubifs_repair-tests/ubifs_repair_run_all.sh.in new file mode 100755 index 0000000..bb95369 --- /dev/null +++ b/tests/ubifs_repair-tests/ubifs_repair_run_all.sh.in @@ -0,0 +1,59 @@ +#!/bin/sh +# Copyright (c), 2023-2024, Huawei Technologies Co, Ltd. +# Author: Zhihao Cheng +# +# Test Description: +# Run all testcases under 'tests' directory + +function print_line() +{ + echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" +} + +TESTBINDIR=@TESTBINDIR@ + +print_line +$TESTBINDIR/authentication_refuse.sh +if [[ $? != 0 ]]; then + echo "authentication_refuse failed" + exit 1 +fi +print_line +$TESTBINDIR/powercut_repair_mount.sh +if [[ $? != 0 ]]; then + echo "powercut_repair_mount failed" + exit 1 +fi +print_line +$TESTBINDIR/cycle_corrupted_repair_fault_inject.sh +if [[ $? != 0 ]]; then + echo "cycle_corrupted_repair_fault_inject failed" + exit 1 +fi +print_line +$TESTBINDIR/repair_bad_image.sh +if [[ $? != 0 ]]; then + echo "repair_bad_image failed" + exit 1 +fi +print_line +$TESTBINDIR/random_corrupted_repair.sh +if [[ $? != 0 ]]; then + echo "random_corrupted_repair failed" + exit 1 +fi +print_line +$TESTBINDIR/cycle_powercut_mount_repair.sh +if [[ $? != 0 ]]; then + echo "cycle_powercut_mount_repair failed" + exit 1 +fi +print_line +$TESTBINDIR/cycle_mount_repair_check.sh +if [[ $? != 0 ]]; then + echo "cycle_mount_repair_check failed" + exit 1 +fi + +exit 0 From patchwork Thu Dec 28 01:36:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhihao Cheng X-Patchwork-Id: 1880648 X-Patchwork-Delegate: david.oberhollenzer@sigma-star.at Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=CKzZfx2f; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4T0rgg0BVCz23dZ for ; Thu, 28 Dec 2023 12:35:59 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=kRjVCeYdw2IVomKccS1yOuIx/81rxHs1p05DqaNKwe0=; b=CKzZfx2ftC3Dsg Jt/Gpsl2+PoZETi8FuTGFlUt/AownrngX7dmbzu9l9U0YxTop8OHmmxFEc+g0a7iF0lxRs2sg5f2E MgwRonJlXRDozZlawr3SK7JICnv4U5eSDgEre4H01CMIUvsXXArzoc9yNrFo8qooXuAGRxjc4KoAz eARIxO8i+xpLFP5YJCgwqXdl1cb3Szt6629/IZpaydrOMXX1XDfpjHaTS9R1EPE74/SBuW9xqnqSh lQ43ShEFdOw+spYMYPzdGNBdDNUVeiXIjmo0PLJQaTNBI7+c9TfSqVgciawNyYnVypXV/YE7wbZ4S QTF4Jt+P+P9oJCy0Uftg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rIfJ6-00Foyd-2c; Thu, 28 Dec 2023 01:35:32 +0000 Received: from szxga05-in.huawei.com ([45.249.212.191]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rIfIx-00Fos8-0P for linux-mtd@lists.infradead.org; Thu, 28 Dec 2023 01:35:30 +0000 Received: from mail.maildlp.com (unknown [172.19.88.214]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4T0rZT4Fp9z1FGKj; Thu, 28 Dec 2023 09:31:29 +0800 (CST) Received: from kwepemm000013.china.huawei.com (unknown [7.193.23.81]) by mail.maildlp.com (Postfix) with ESMTPS id 7F2A81A0194; Thu, 28 Dec 2023 09:35:06 +0800 (CST) Received: from huawei.com (10.175.127.227) by kwepemm000013.china.huawei.com (7.193.23.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 28 Dec 2023 09:33:39 +0800 From: Zhihao Cheng To: , , , , CC: , Subject: [PATCH mtd-utils 11/11] tests: ubifs_repair: Add README Date: Thu, 28 Dec 2023 09:36:39 +0800 Message-ID: <20231228013639.2827205-12-chengzhihao1@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20231228013639.2827205-1-chengzhihao1@huawei.com> References: <20231228013639.2827205-1-chengzhihao1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To kwepemm000013.china.huawei.com (7.193.23.81) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231227_173523_523143_397E55D9 X-CRM114-Status: GOOD ( 13.45 ) X-Spam-Score: -2.3 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Add document for ubifs_repair testcases, explain all testcases and how to run them. Signed-off-by: Zhihao Cheng --- tests/ubifs_repair-tests/README.txt | 233 ++++++++++++++++++++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 tests/ubif [...] Content analysis details: (-2.3 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 RCVD_IN_MSPIKE_H5 RBL: Excellent reputation (+5) [45.249.212.191 listed in wl.mailspike.net] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [45.249.212.191 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Add document for ubifs_repair testcases, explain all testcases and how to run them. Signed-off-by: Zhihao Cheng --- tests/ubifs_repair-tests/README.txt | 233 ++++++++++++++++++++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 tests/ubifs_repair-tests/README.txt diff --git a/tests/ubifs_repair-tests/README.txt b/tests/ubifs_repair-tests/README.txt new file mode 100644 index 0000000..cb1ce98 --- /dev/null +++ b/tests/ubifs_repair-tests/README.txt @@ -0,0 +1,233 @@ + + ubifs_repair tests + ================== + + There are seven testcases for ubifs_repair on encryption/non-encryption + situations: + 1) authentication_refuse: Currently authenticated UBIFS image is not + supported for repairing, check whether ubifs_repair can refuse + authenticated UBIFS image. + 2) random_corrupted_repair: Inject random corruption on UBIFS image + by writting random data on kinds of mtd devices (eg. nand, nor), + check the consistency of UBIFS after repairing. + This testcase simulate random bad UBIFS image caused by hardware + exceptions(eg. ecc uncorrectable, unwritten), and makes sure that + ubifs_repair could make UBIFS be consistent after repairing UBIFS + image. + 3) cycle_corrupted_repair_fault_inject: Inject memory/io fault while + repairing corrupted UBIFS images. + This testcase mainly checks whether ubifs_repair has problems (eg. + memleak, UAF, null-ptr-def, etc.) in random error paths. Besides, + it provides a similar way to simulate powercut during repairing, + and checks whether ubifs_repair can fix an UBIFS image after many + repairing rounds interrupted by kinds of errors. + 4) cycle_powercut_mount_repair: Inject powercut while doing fsstress + on mounted UBIFS, check the consistency of UBIFS after repairing. + This testscase mainly makes sure that ubifs_repair can make UBIFS + image be consistent in common stress cases and powercut cases. + 5) powercut_repair_mount: Inject powercut while doing fsstress on + mounted UBIFS for kinds of flashes (eg. nand, nor). + This testcase mainly makes sure that ubifs_repair can make UBIFS + image be consistent on different flashes (eg. nand, nor). Because + the min_io_size of nor flash is 1, the UBIFS image on nor flash + will be different from nand flash after doing powercut, so we need + make sure ubifs_repair can handle these two types of flash. + 6) cycle_mount_repair_check: Do fsstress and repair ubifs image, make + sure all files(and their data) are not lost after repairing. + This testcase mainly checks whether ubifs_repair could corrupt + filesystem content in common case. + 7) repair_bad_image: For kinds of inconsistent UBIFS images(which + can simulate corruptions caused by some potentional UBIFS bug), check + repairing result. + This testcase mainly checks whether the behavior is in expected after + repairing specific inconsistent UBIFS image. There is no debugfs tools + (for example: debugfs[ext4], xfs_db) for UBIFS, so no way to inject + precise corruption into UBIFS image, we have to prepare inconsistent + UBIFS images in advance like e2fsprogs[1] does. (Goto [2] to see how to + generate inconsistent UBIFS images). Here's a descriptons of the various + test images: + + ========================================================================= + image | Description | expectancy + ------------------------------------------------------------------------- + good | good image contains | repair success, fs content is + | kinds of files. | not changed. + ------------------------------------------------------------------------- + sb_fanout | invalid fanout in | repair failed. + | superblock. | + ------------------------------------------------------------------------- + sb_fmt_version | invalid fmt_version | repair failed. + | in superblock. | + ------------------------------------------------------------------------- + sb_leb_size | invalid leb_size in | repair failed. + | superblock. | + ------------------------------------------------------------------------- + sb_log_lebs | invalid log lebs in | repair failed. + | superblock. | + ------------------------------------------------------------------------- + sb_min_io_size | invalid min_io_size | repair failed. + | in superblock. | + ------------------------------------------------------------------------- + master_highest_inum | invalid highest_inum| repair success, fs content is + | in master nodes. | not changed. + ------------------------------------------------------------------------- + master_lpt | bad lpt pos in | repair success, fs content is + | master nodes. | not changed. + ------------------------------------------------------------------------- + master_tnc | bad tnc pos in | repair success, fs content is + | master nodes. | not changed. + ------------------------------------------------------------------------- + master_total_dead | bad total_dead in | repair success, fs content is + | master nodes. | not changed. + ------------------------------------------------------------------------- + master_total_dirty | bad total_dirty in | repair success, fs content is + | master nodes. | not changed. + ------------------------------------------------------------------------- + master_total_free | bad total_free in | repair success, fs content is + | master nodes. | not changed. + ------------------------------------------------------------------------- + log | corrupted log area. | repair success, fs content is + | | not changed. + ------------------------------------------------------------------------- + lpt_dirty | bad dirty in pnode. | repair success, fs content is + | | not changed. + ------------------------------------------------------------------------- + lpt_flags | bad flags in pnode | repair success, fs content is + | (eg. index). | not changed. + ------------------------------------------------------------------------- + lpt_free | bad free in pnode. | repair success, fs content is + | | not changed. + ------------------------------------------------------------------------- + lpt_pos | bad pos in nnode. | repair success, fs content is + | | not changed. + ------------------------------------------------------------------------- + tnc_lv0_key | bad key in lv0 | repair success, fs content is + | znode. | not changed. + ------------------------------------------------------------------------- + tnc_lv0_len | bad len in lv0 | repair success, fs content is + | znode. | not changed. + ------------------------------------------------------------------------- + tnc_lv0_pos | bad pos in lv0 | repair success, fs content is + | znode. | not changed. + ------------------------------------------------------------------------- + tnc_noleaf_key | bad key in non-leaf | repair success, fs content is + | znode. | not changed. + ------------------------------------------------------------------------- + tnc_noleaf_len | bad len in non-leaf | repair success, fs content is + | znode. | not changed. + ------------------------------------------------------------------------- + tnc_noleaf_pos | bad pos in non-leaf | repair success, fs content is + | znode. | not changed. + ------------------------------------------------------------------------- + inode_data | bad data node. | repair success, file content + | | is changed, other files are + | | not changed. + ------------------------------------------------------------------------- + inode_mode | bad inode mode for | repair success, soft link + | solf link file. | file is dropped, other files + | | are not changed. + ------------------------------------------------------------------------- + inode_nlink | wrong nlink for | repair success, nlink is + | file. | corrected, fs content is not + | | changed. + ------------------------------------------------------------------------- + inode_size | wrong inode size | repair success, inode size is + | for file. | corrected, fs content is not + | | changed. + ------------------------------------------------------------------------- + inode_xcnt | wrong inode | repair success, xattr_cnt is + | xattr_cnt for file. | corrected, fs content is not + | | changed. + ------------------------------------------------------------------------- + soft_link_data_len | bad inode data_len | repair success, soft link + | for solt link file. | file is dropped, other files + | | are not changed. + ------------------------------------------------------------------------- + dentry_key | bad dentry key for | repair success, dentry is + | file. | removed, other files are + | | not changed. + ------------------------------------------------------------------------- + dentry_nlen | inconsistent nlen | repair success, dentry is + | and name in dentry | removed, other files are + | for file. | not changed. + ------------------------------------------------------------------------- + dentry_type | inconsistent type | repair success, dentry is + | between dentry and | removed, other files are + | inode for file. | not changed. + ------------------------------------------------------------------------- + xinode_flags | lost UBIFS_XATTR_FL | repair success, xattr is + | in xattr inode | removed, other files are + | flags for file. | not changed. + ------------------------------------------------------------------------- + xinode_key | bad xattr inode key | repair success, xattr is + | for file. | removed, other files are + | | not changed. + ------------------------------------------------------------------------- + xinode_mode | bad xattr inode | repair success, xattr is + | mode for file. | removed, other files are + | | not changed. + ------------------------------------------------------------------------- + xentry_key | bad xattr entry key | repair success, xattr is + | for file. | removed, other files are + | | not changed. + ------------------------------------------------------------------------- + xentry_nlen | inconsistent nlen | repair success, xattr is + | and name in xattr | removed, other files are + | entry for file. | not changed. + ------------------------------------------------------------------------- + xentry_type | inconsistent type | repair success, xattr is + | between xattr entry | removed, other files are + | and xattr inode for | not changed. + | file. | + ------------------------------------------------------------------------- + dir_lost | bad dentry for dir. | repair success, dir and files + | | under dir are removed, other + | | files are not changed. + ------------------------------------------------------------------------- + root_dir | bad '/'. | repair success, create new + | | root dir('/'). + ========================================================================= + + Dependence + ---------- + kernel configs: + CONFIG_MTD_NAND_NANDSIM=m + CONFIG_MTD_MTDRAM=m + CONFIG_MTD_UBI=m + CONFIG_MTD_UBI_FASTMAP=y + CONFIG_UBIFS_FS=m + CONFIG_UBIFS_FS_XATTR=y + CONFIG_UBIFS_FS_AUTHENTICATION=y + CONFIG_FS_ENCRYPTION=y + CONFIG_FAILSLAB=y + CONFIG_FAIL_PAGE_ALLOC=y + + CONFIG_DEBUG_KMEMLEAK=y // optional + + tools: + fsstress [3][4] + keyctl [5] + fscryptctl [6] + setfattr/getfattr [7] + + Running + ------- + + Please build and install mtd-utils first. + Run single case: + cd $INSTALL_DIR/libexec/mtd-utils + ./powercut_repair_mount.sh + ./random_corrupted_repair.sh + ./cycle_mount_repair_check.sh + Run all cases: sh $INSTALL_DIR/libexec/mtd-utils/ubifs_repair_run_all.sh + + References + ---------- + + [1] https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/tree/tests/README + [2] https://bugzilla.kernel.org/show_bug.cgi?id=218327 + [3] https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git/tree/ltp/fsstress.c + [4] https://github.com/linux-test-project/ltp/blob/master/testcases/kernel/fs/fsstress/fsstress.c + [5] https://github.com/torvalds/linux/blob/master/security/keys/keyctl.c + [6] https://github.com/google/fscryptctl + [7] https://github.com/philips/attr/tree/master