diff options
Diffstat (limited to 'tests/filesystem')
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 "$@" |