Re: [PATCH v2] overlay: add test for lowerdir mount option parsing

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On Mon, Oct 23, 2023 at 01:49:16PM +0300, Amir Goldstein wrote:
> Check parsing and display of spaces and escaped colons and commans in
> lowerdir mount option.
> 
> This is a regression test for two bugs introduced in v6.5 with the
> conversion to new mount api.
> 
> There is another regression of new mount api related to libmount parsing
> of escaped commas, but this needs a fix in libmount - this test only
> verifies the fixes in the kernel, so it uses LIBMOUNT_FORCE_MOUNT2=always
> to force mount(2) and kernel pasring of the comma separated options list.
> 
> Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx>
> ---
> 
> Zorro,
> 
> I've fixed the libmount issue by splitting the combined test cases
> to two test cases that corresspond to the two kernel fix commits.
> 
> The first test case (lowerdir_spaces) is agnostic to libmount version.
> 
> The second test case (lowerdir_commas) explicitly opts-in to mount(2)
> syscall.
> 
> ATM, using LIBMOUNT_FORCE_MOUNT2=always, as the second test cases does,
> would be our recommended workaround for the escaped commas regression
> in v6.5, until libmount gets a fix to detect overlayfs escaped commas.
> 
> Thanks,
> Amir.
> 
>  tests/overlay/083     | 71 +++++++++++++++++++++++++++++++++++++++++++
>  tests/overlay/083.out |  2 ++
>  2 files changed, 73 insertions(+)
>  create mode 100755 tests/overlay/083
>  create mode 100644 tests/overlay/083.out
> 
> diff --git a/tests/overlay/083 b/tests/overlay/083
> new file mode 100755
> index 00000000..0f434951
> --- /dev/null
> +++ b/tests/overlay/083
> @@ -0,0 +1,71 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (C) 2023 CTERA Networks. All Rights Reserved.
> +#
> +# FS QA Test 083
> +#
> +# Test regressions in parsing and display of special chars in mount options.
> +#
> +# The following kernel commits from v6.5 introduced regressions:
> +#  b36a5780cb44 ("ovl: modify layer parameter parsing")
> +#  1784fbc2ed9c ("ovl: port to new mount api")
> +#
> +
> +. ./common/preamble
> +_begin_fstest auto quick mount
> +
> +# Import common functions.
> +. ./common/filter
> +
> +# real QA test starts here
> +_supported_fs overlay
> +_fixed_by_kernel_commit 32db51070850 \
> +	"ovl: fix regression in showing lowerdir mount option"
> +_fixed_by_kernel_commit c34706acf40b \
> +	"ovl: fix regression in parsing of mount options with escaped comma"
> +
> +# _overlay_check_* helpers do not handle special chars well
> +_require_scratch_nocheck
> +
> +# Remove all files from previous tests
> +_scratch_mkfs
> +
> +# Create lowerdirs with special characters
> +lowerdir_spaces="$OVL_BASE_SCRATCH_MNT/lower1 with  spaces"
> +lowerdir_colons="$OVL_BASE_SCRATCH_MNT/lower2:with::colons"
> +lowerdir_commas="$OVL_BASE_SCRATCH_MNT/lower3,with,,commas"
> +lowerdir_colons_esc="$OVL_BASE_SCRATCH_MNT/lower2\:with\:\:colons"
> +lowerdir_commas_esc="$OVL_BASE_SCRATCH_MNT/lower3\,with\,\,commas"
> +upperdir=$OVL_BASE_SCRATCH_MNT/$OVL_UPPER
> +workdir=$OVL_BASE_SCRATCH_MNT/$OVL_WORK
> +mkdir -p "$lowerdir_spaces" "$lowerdir_colons" "$lowerdir_commas"
> +
> +# _overlay_mount_* helpers do not handle special chars well, so execute mount directly.
> +# if escaped colons are not parsed correctly, mount will fail.
> +$MOUNT_PROG -t overlay ovl_esc_test $SCRATCH_MNT \
> +	-o"upperdir=$upperdir,workdir=$workdir" \
> +	-o"lowerdir=$lowerdir_colons_esc:$lowerdir_spaces" \
> +	2>&1 | tee -a $seqres.full
> +
> +# if spaces are not escaped when showing mount options,
> +# mount command will not show the word 'spaces' after the spaces
> +$MOUNT_PROG -t overlay | grep ovl_esc_test  | tee -a $seqres.full | grep -v spaces && \
> +	echo "ERROR: escaped spaces truncated from lowerdir mount option"
> +$UMOUNT_PROG $SCRATCH_MNT
> +
> +# Kernel commit c34706acf40b fixes parsing of mount options with escaped comma
> +# when the mount options string is provided via data argument to mount(2) syscall.
> +# With libmount >= 2.39, libmount itself will try to split the comma separated
> +# options list provided to mount(8) commnad line and call fsconfig(2) for each
> +# mount option seperately.  Since libmount does not obay to overlayfs escaped
> +# commas format, it will call fsconfig(2) with the wrong path (i.e. ".../lower3")
> +# and this test will fail, but the failure would indicate a libmount issue, not
> +# a kernel issue.  Therefore, force libmount to use mount(2) syscall, so we only
> +# test the kernel fix.
> +LIBMOUNT_FORCE_MOUNT2=always $MOUNT_PROG -t overlay $OVL_BASE_SCRATCH_DEV $SCRATCH_MNT \
> +	-o"upperdir=$upperdir,workdir=$workdir,lowerdir=$lowerdir_commas_esc" 2>> $seqres.full || \
> +	echo "ERROR: incorrect parsing of escaped comma in lowerdir mount option"

Hi Amir, Please check, this part still fails as:

# ./check -overlay overlay/083
FSTYP         -- overlay
PLATFORM      -- Linux/x86_64 hp-dl380pg8-01 6.6.0-rc6-mainline+ #7 SMP PREEMPT_DYNAMIC Thu Oct 19 22:34:28 CST 2023
MKFS_OPTIONS  -- /mnt/scratch
MOUNT_OPTIONS -- -o context=system_u:object_r:root_t:s0 /mnt/scratch /mnt/scratch/ovl-mnt

overlay/083 0s ... - output mismatch (see /root/git/xfstests/results//overlay/083.out.bad)
    --- tests/overlay/083.out   2023-10-23 21:18:46.765059777 +0800
    +++ /root/git/xfstests/results//overlay/083.out.bad 2023-10-23 21:51:39.030561512 +0800
    @@ -1,2 +1,3 @@
     QA output created by 083
    +ERROR: incorrect parsing of escaped comma in lowerdir mount option
     Silence is golden
    ...
    (Run 'diff -u /root/git/xfstests/tests/overlay/083.out /root/git/xfstests/results//overlay/083.out.bad'  to see the entire diff)

HINT: You _MAY_ be missing kernel fix:
      32db51070850 ovl: fix regression in showing lowerdir mount option

HINT: You _MAY_ be missing kernel fix:
      c34706acf40b ovl: fix regression in parsing of mount options with escaped comma

Ran: overlay/083
Failures: overlay/083
Failed 1 of 1 tests

# cat results/overlay/083.full 
ovl_esc_test on /mnt/scratch/ovl-mnt type overlay (rw,relatime,seclabel,lowerdir=/mnt/scratch/lower2\:with\:\:colons:/mnt/scratch/lower1 with  spaces,upperdir=/mnt/scratch/ovl-upper,workdir=/mnt/scratch/ovl-work,uuid=on)
mount: /mnt/scratch/ovl-mnt: mount(2) system call failed: Stale file handle.
       dmesg(1) may have more information after failed mount system call.

# dmesg
[341033.046302] run fstests overlay/083 at 2023-10-23 22:00:11
[341033.458188] XFS (loop0): Mounting V5 Filesystem 23e1781e-f5ce-4c2b-8801-3b586f459ee8
[341033.464410] XFS (loop0): Ending clean mount
[341033.506666] overlayfs: failed to verify origin (/lower3,with,,commas, ino=16908385, err=-116)
[341033.507626] overlayfs: failed to verify upper root origin
[341033.540865] XFS (loop1): Unmounting Filesystem 58e81b68-81dd-48cd-ab23-ce30ec77e689
[341033.554488] XFS (loop0): Unmounting Filesystem 23e1781e-f5ce-4c2b-8801-3b586f459ee8

> +
> +echo "Silence is golden"
> +status=0
> +exit
> diff --git a/tests/overlay/083.out b/tests/overlay/083.out
> new file mode 100644
> index 00000000..0beba309
> --- /dev/null
> +++ b/tests/overlay/083.out
> @@ -0,0 +1,2 @@
> +QA output created by 083
> +Silence is golden
> -- 
> 2.34.1
> 




[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux