summaryrefslogtreecommitdiffstats
path: root/tests/filesystem
diff options
context:
space:
mode:
Diffstat (limited to 'tests/filesystem')
-rw-r--r--tests/filesystem/ext4/freeze-protection-bypass/Makefile56
-rw-r--r--tests/filesystem/ext4/freeze-protection-bypass/PURPOSE5
-rwxr-xr-xtests/filesystem/ext4/freeze-protection-bypass/runtest.sh86
-rwxr-xr-xtests/filesystem/ext4/inventory3
4 files changed, 150 insertions, 0 deletions
diff --git a/tests/filesystem/ext4/freeze-protection-bypass/Makefile b/tests/filesystem/ext4/freeze-protection-bypass/Makefile
new file mode 100644
index 000000000..24233a4b0
--- /dev/null
+++ b/tests/filesystem/ext4/freeze-protection-bypass/Makefile
@@ -0,0 +1,56 @@
+# Copyright (c) 2018 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# Author: Boyang Xue <bxue@redhat.com>
+
+TOPLEVEL_NAMESPACE=
+PACKAGE_NAME=kernel
+
+export TEST=freeze-protection-bypass
+export TESTVERSION=1.0
+
+BUILT_FILES=
+
+FILES=$(METADATA) runtest.sh Makefile
+
+.PHONY: all install download clean
+
+run: $(FILES) build
+ ./runtest.sh
+
+build: $(BUILT_FILES)
+ chmod a+x ./runtest.sh
+
+clean:
+ rm -f *~ $(BUILT_FILES)
+
+include /usr/share/rhts/lib/rhts-make.include
+
+$(METADATA): Makefile
+ @echo "Owner: Boyang Xue <bxue@redhat.com>" > $(METADATA)
+ @echo "Name: $(TEST)" >> $(METADATA)
+ @echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
+ @echo "Path: $(TEST_DIR)" >> $(METADATA)
+ @echo "Description: Test for Bug - ext4: fix freeze protection bypass" >> $(METADATA)
+ @echo "Type: Regression" >> $(METADATA)
+ @echo "TestTime: 3m" >> $(METADATA)
+ @echo "RunFor: kernel" >> $(METADATA)
+ @echo "Requires: " >> $(METADATA)
+ @echo "Priority: Normal" >> $(METADATA)
+ @echo "License: GPLv2+" >> $(METADATA)
+ @echo "Confidential: no" >> $(METADATA)
+ @echo "Destructive: no" >> $(METADATA)
+
+ rhts-lint $(METADATA)
diff --git a/tests/filesystem/ext4/freeze-protection-bypass/PURPOSE b/tests/filesystem/ext4/freeze-protection-bypass/PURPOSE
new file mode 100644
index 000000000..fa8df1870
--- /dev/null
+++ b/tests/filesystem/ext4/freeze-protection-bypass/PURPOSE
@@ -0,0 +1,5 @@
+Test Name: freeze-protection-bypass
+Author: Boyang Xue <bxue@redhat.com>
+Location: /kernel/filesystem/freeze-protection-bypass
+
+Description: regression test for Bug - ext4: fix freeze protection bypass
diff --git a/tests/filesystem/ext4/freeze-protection-bypass/runtest.sh b/tests/filesystem/ext4/freeze-protection-bypass/runtest.sh
new file mode 100755
index 000000000..b70c2b130
--- /dev/null
+++ b/tests/filesystem/ext4/freeze-protection-bypass/runtest.sh
@@ -0,0 +1,86 @@
+#!/bin/bash
+#
+# Copyright (c) 2018 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# Author: Boyang Xue <bxue@redhat.com>
+
+PACKAGE=kernel
+
+. /usr/share/beakerlib/beakerlib.sh
+
+rlJournalStart
+
+WDIR=/tmp/TC_freeze-protection-bypass.tmp.workdir
+ODIR=/tmp/TC_freeze-protection-bypass.tmp.oldmnt
+NDIR=/tmp/TC_freeze-protection-bypass.tmp.newmnt
+mkdir $ODIR $NDIR $WDIR
+
+cd $WDIR
+fallocate -l 64M 64M.img
+mkfs.ext4 -qF 64M.img
+TDEV=$(losetup -f --show 64M.img)
+
+TRID=$RANDOM
+
+rlPhaseStartSetup
+
+ # The following patch for this bug is integrated in kernel v4.18
+ #
+ # vfs: add the sb_start_intwrite_trylock() helper
+ # ext4: factor out helper ext4_sample_last_mounted()
+ # ext4: do not update s_last_mounted of a frozen fs
+ KNVR=$(uname -r | cut -d '-' -f1)
+ rlCmpVersion $KNVR 4.18.0 >/dev/null
+ if [[ $? -eq 2 ]]; then
+ ISFIXED=0
+ rlPass "Kernel version < 4.18, indicating it's vulnerable to this bug. Test skipped as pass."
+ exit 0
+ else
+ ISFIXED=1
+ fi
+
+ rlRun "mount $TDEV $ODIR"
+ rlRun "echo TC_freeze-protection-bypass > $ODIR/TC_freeze-protection-bypass"
+ rlRun "umount $ODIR"
+rlPhaseEnd
+
+rlPhaseStartTest
+ rlRun "echo \"run TC_freeze-protection-bypass#${TRID}\" >/dev/kmsg"
+ rlRun "mount $TDEV $NDIR"
+ rlLog "Run 'fsfreeze -f $NDIR &'"
+ fsfreeze -f $NDIR &
+ wait $!
+ rlRun "grep TC_freeze-protection-bypass $NDIR/TC_freeze-protection-bypass"
+ rlRun "! dmesg | tac | sed -ne \"0,\#run TC_freeze-protection-bypass\#${TRID}#p\" | tac | grep -E \"ext4_journal_check_start|ext4_journal_start_sb\""
+ if [[ $? -eq 0 ]]; then
+ rlPass "The kernel warning isn't triggered. Test passes."
+ else
+ rlFail "The kernel warning is triggered. Test fails."
+ fi
+rlPhaseEnd
+
+rlPhaseStartCleanup
+ rlRun "fsfreeze -u $NDIR"
+ rlRun "umount $TDEV"
+ rlRun "losetup -d $TDEV"
+ rlRun "rm -f 64M.img"
+ rlRun "rm -rf $NDIR"
+ rlRun "rm -rf $ODIR"
+ rlRun "rm -rf $WDIR"
+rlPhaseEnd
+
+rlJournalPrintText
+rlJournalEnd
diff --git a/tests/filesystem/ext4/inventory b/tests/filesystem/ext4/inventory
new file mode 100755
index 000000000..fe5129040
--- /dev/null
+++ b/tests/filesystem/ext4/inventory
@@ -0,0 +1,3 @@
+#!/bin/bash
+export TEST_DOCKER_EXTRA_ARGS="--privileged -v /dev:/dev"
+exec merge-standard-inventory "$@"