Re: [PATCH] fstests: test xfs rw remount with unknown ro-compat features

Zorro Lang <[email protected]>
Newsgroups gmane.comp.file-systems.xfs.general
Message-ID <20160827152427.GK10350__27125.0190250159$1472311479$gmane$org@dhcp12-143.nay.redhat.com>
On Sat, Aug 27, 2016 at 10:51:37PM +0800, Zorro Lang wrote:
> Although ro-compat features cannot be mounted rw, a bug allows
> an ro->rw remount transition, and this will corrupt the filesystem
> if it contains ro-compat features unknown to the running kernel.
> 
> This bug has been fix on linux kernel (d0a58e8 xfs: disallow rw
> remount on fs with unknown ro-compat features), this case is
> the regression testcase of that bug.
> 
> Signed-off-by: Zorro Lang <[email protected]>
> ---
>  tests/xfs/263     | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  tests/xfs/263.out |  6 ++++
>  tests/xfs/group   |  1 +
>  3 files changed, 106 insertions(+)
>  create mode 100755 tests/xfs/263
>  create mode 100644 tests/xfs/263.out
> 
> diff --git a/tests/xfs/263 b/tests/xfs/263
> new file mode 100755
> index 0000000..b934e9f
> --- /dev/null
> +++ b/tests/xfs/263
> @@ -0,0 +1,99 @@
> +#! /bin/bash
> +# FS QA Test 263
> +#
> +# Test upstream d0a58e8:
> +#   xfs: disallow rw remount on fs with unknown ro-compat features
> +#
> +#-----------------------------------------------------------------------
> +# Copyright (c) 2016 Red Hat, Inc.  All Rights Reserved.
> +#
> +# 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.
> +#
> +# This program is distributed in the hope that it would 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, write the Free Software Foundation,
> +# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> +#-----------------------------------------------------------------------
> +#
> +
> +seq=`basename $0`
> +seqres=$RESULT_DIR/$seq
> +echo "QA output created by $seq"
> +
> +here=`pwd`
> +tmp=/tmp/$$
> +status=1	# failure is the default!
> +trap "_cleanup; exit \$status" 0 1 2 3 15
> +
> +_cleanup()
> +{
> +	cd /
> +	rm -f $tmp.*
> +	# Due to we've broken the superblock of SCRATCH_DEV by
> +	# xfs_db, so clean bad superblock at the end
> +	_scratch_unmount
> +	_scratch_mkfs >/dev/null 2>&1
> +}
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +. ./common/filter
> +
> +# remove previous $seqres.full before test
> +rm -f $seqres.full
> +
> +# real QA test starts here
> +_supported_fs xfs
> +_supported_os Linux
> +_require_scratch
> +_require_xfs_crc
> +
> +# Only V5 XFS disallow rw mount/remount with unknown ro-compat
> +# features
> +MKFS_OPTIONS="-m crc=1"
> +_scratch_mkfs_xfs >>$seqres.full 2>&1
> +
> +# set the highest bit of features_ro_compat, use it as an unknown
> +# feature bit. If one day this bit become known feature, please
> +# change this case.
> +$XFS_DB_PROG -x -c "sb 0" \
> +                -c "write features_ro_compat $((2**31))" \
> +		$SCRATCH_DEV
> +
> +echo "rw mount test"
> +# Generally this mount failed as bad superblock
> +# But still keep testing this
> +MOUNT_OPTIONS="-o rw"
> +_scratch_mount 2>>$seqres.full
> +if [ $? -eq 0 ]; then
> +	_fail "rw mount test failed"
> +fi
> +
> +echo "ro mount test"
> +MOUNT_OPTIONS="-o ro"
> +_scratch_mount
> +if [ $? -ne 0 ]; then
> +	_fail "ro mount test failed"
> +else
> +	# no hang/panic is fine
> +	$FSSTRESS_PROG -d $SCRATCH_MNT -p 4 -n 400 >>$seqres.full 2>&1
> +fi
> +
> +dmesg -c >/dev/null
> +echo "rw remount test"
> +MOUNT_OPTIONS="-o rw,remount"
> +_scratch_mount 2>>$seqres.full
> +if [ $? -eq 0 ]; then
> +	_fail "rw,remount test failed"
> +fi
> +dmesg -c | sed -n -e "s/.*XFS.*: \(ro->rw transition prohibited.*\)/\1/p"
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/xfs/263.out b/tests/xfs/263.out
> new file mode 100644
> index 0000000..974e02f
> --- /dev/null
> +++ b/tests/xfs/263.out
> @@ -0,0 +1,6 @@
> +QA output created by 263
> +features_ro_compat = 0x80000000
> +rw mount test
> +ro mount test
> +rw remount test
> +mount: cannot remount LOOP_IMG read-write, is write-protected

Sorry, please ignore this patch. I forgot to update the .out file.
I'll send a V2 to fix this problem.

Thanks,
Zorro

> diff --git a/tests/xfs/group b/tests/xfs/group
> index 6905a62..ec3c022 100644
> --- a/tests/xfs/group
> +++ b/tests/xfs/group
> @@ -260,6 +260,7 @@
>  260 auto quick quota
>  261 auto quick quota
>  262 auto quick quota
> +263 auto quick mount
>  265 auto clone
>  266 dump ioctl auto quick
>  267 dump ioctl tape
> -- 
> 2.7.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe fstests" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.