]> git.apps.os.sepia.ceph.com Git - xfstests-dev.git/commitdiff
fstests: btrfs: a new test case to verify scrub and rescue=idatacsums
authorQu Wenruo <wqu@suse.com>
Mon, 12 May 2025 09:39:10 +0000 (19:09 +0930)
committerZorro Lang <zlang@kernel.org>
Fri, 23 May 2025 15:39:02 +0000 (23:39 +0800)
There is a kernel bug report that scrub will trigger a NULL pointer
dereference when rescue=idatacsums mount option is provided.

Add a test case for such situation, to verify kernel can gracefully
reject scrub when  there is no csum tree.

Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: Zorro Lang <zlang@kernel.org>
tests/btrfs/336 [new file with mode: 0755]
tests/btrfs/336.out [new file with mode: 0644]

diff --git a/tests/btrfs/336 b/tests/btrfs/336
new file mode 100755 (executable)
index 0000000..f6691ba
--- /dev/null
@@ -0,0 +1,35 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (C) 2025 SUSE Linux Products GmbH. All Rights Reserved.
+#
+# FS QA Test 336
+#
+# Make sure read-only scrub won't cause NULL pointer dereference with
+# rescue=idatacsums mount option
+#
+. ./common/preamble
+_begin_fstest auto scrub quick
+
+_fixed_by_kernel_commit 6aecd91a5c5b \
+       "btrfs: avoid NULL pointer dereference if no valid extent tree"
+
+_require_scratch
+_scratch_mkfs >> $seqres.full
+
+_try_scratch_mount "-o ro,rescue=ignoredatacsums" > /dev/null 2>&1 ||
+       _notrun "rescue=ignoredatacsums mount option not supported"
+
+# For unpatched kernel this will cause NULL pointer dereference and crash the kernel.
+$BTRFS_UTIL_PROG scrub start -Br $SCRATCH_MNT >> $seqres.full 2>&1
+# For patched kernel scrub will be gracefully rejected.
+if [ $? -eq 0 ]; then
+       echo "read-only scrub should fail but didn't"
+fi
+
+_scratch_unmount
+
+echo "Silence is golden"
+
+# success, all done
+status=0
+exit
diff --git a/tests/btrfs/336.out b/tests/btrfs/336.out
new file mode 100644 (file)
index 0000000..9263628
--- /dev/null
@@ -0,0 +1,2 @@
+QA output created by 336
+Silence is golden