[LTP] [PATCH] unshare01.sh: Setup parent mount flag before unshare testing
zhaogongyi
zhaogongyi@huawei.com
Sat Feb 27 10:46:50 CET 2021
Hi Yang,
> 6) unshare_test "--mount --propagation shared" \
> "mount --bind dir_A dir_B" "mounted";;
> For example:
> # 6) If we run with "--mount --propagation shared" and parent mount
> namespace is shared, mount and unmount events can do propagation. "
> # 7) If we run with "--mount --propagation shared" and parent mount
> namespace is not shared, mount and unmount events cannot do
> propagation. "
In test 6, when we run with "--mount --propagation shared" and parent mount namespace is not shared,
there are 3 steps:
1) unshare --mount --propagation shared
2) mount --bind dir_A dir_B
3) exit the namespace
So the test has no sence sinc step 3) has exit the namespace.
Thanks!
=============================================================
> On 2021/2/25 18:02, zhaogongyi wrote:
> > Hi Yang,
> >
> >> I don't like the approach which enforces mountpoint to be shared in
> >> parent mount namespace.
> >> I think we can tune expected value by checking propagation flag in
> >> parent mount namespace because of two reasons:
> >> 1) Make test cover more cases.
> >> 2) Don't depend on the fixed tmpfs.
> >
> > If we have no fixed parent mount namespace, the test looks like will pass
> at any cases since we judge result by "grep -w 'dir_B' /proc/self/mountinfo
> | grep -qw 'shared'".
> Hi Zhongyi,
>
> This issue is caused by the state(e.g. share or private) of parent mount
> namespace and both of results are expected.
>
> > It seems a bit tangential to our test objective as " # 6) If we run with
> "--mount --propagation shared", mount and unmount events propagate to
> its parent mount namespace. "
> We also need to update the description of #6 because it is true only when
> the parent mount namespace is shared.
> For example:
> # 6) If we run with "--mount --propagation shared" and parent mount
> namespace is shared, mount and unmount events can do propagation. "
> # 7) If we run with "--mount --propagation shared" and parent mount
> namespace is not shared, mount and unmount events cannot do
> propagation. "
>
> Best Regards,
> Xiao Yang
> >
> > Thanks!
> >
> >
> =========================================================
> =
> >
> >> Hi Zhongyi, Petr
> >>
> >> I don't like the approach which enforces mountpoint to be shared in
> >> parent mount namespace.
> >> I think we can tune expected value by checking propagation flag in
> >> parent mount namespace because of two reasons:
> >> 1) Make test cover more cases.
> >> 2) Don't depend on the fixed tmpfs.
> >>
> >> Zhongyi, could you test the following patch on your enviorment?
> >> ---------------------------------------------------------------------
> >> ---------------------------- diff --git
> >> a/testcases/commands/unshare/unshare01.sh
> >> b/testcases/commands/unshare/unshare01.sh
> >> index bf163a7f4..78ea83fc0 100755
> >> --- a/testcases/commands/unshare/unshare01.sh
> >> +++ b/testcases/commands/unshare/unshare01.sh
> >> @@ -40,6 +40,17 @@
> >> max_mntns_path="/proc/sys/user/max_mnt_namespaces"
> >> default_max_userns=-1
> >> default_max_mntns=-1
> >>
> >> +parse_propagation_flag()
> >> +{
> >> + mount --bind dir_A dir_B
> >> + if grep -w 'dir_B' /proc/self/mountinfo | grep -qw 'shared';
> then
> >> + echo "mounted"
> >> + else
> >> + echo "unmounted"
> >> + fi
> >> + umount dir_B
> >> +}
> >> +
> >> setup()
> >> {
> >> # On some distributions(e.g RHEL7.4), the default value of
> >> @@
> >> -149,7 +160,8 @@ do_test()
> >> 4) unshare_test "--user --map-root-user" "id -g" "0";;
> >> 5) unshare_test "--mount" "mount --bind dir_A dir_B"
> >> "unmounted";;
> >> 6) unshare_test "--mount --propagation shared" \
> >> - "mount --bind dir_A dir_B" "mounted";;
> >> + "mount --bind dir_A dir_B" \
> >> + "$(parse_propagation_flag)";;
> >> 7) unshare_test "--user --map-root-user --mount" \
> >> "mount --bind dir_A dir_B"
> "unmounted";;
> >> 8) unshare_test "--user --map-root-user --mount
> >> --propagation shared" \
> >> --
> >> ---------------------------------------------------------------------
> >> ---------------------
> >>
> >> Best Regards,
> >> Xiao Yang
> >> On 2021/2/24 9:40, Petr Vorel wrote:
> >>> Hi,
> >>>
> >>>> We need setup parent mount flag to shared before unshare testing,
> >>>> or it will fail for system which has no systemd service since the
> >>>> propagation flag is changed by systemd. From man 7
> >> mount_namespaces.
> >>> Do I understand correctly that all distros without systemd are
> >>> affected, because systemd "automatically remounts all mount points
> >>> as MS_SHARED on system startup" and test expect it?
> >>>
> >>>> Signed-off-by: Zhao Gongyi<zhaogongyi@huawei.com>
> >>>> ---
> >>>> testcases/commands/unshare/unshare01.sh | 9 ++++++++-
> >>>> 1 file changed, 8 insertions(+), 1 deletion(-) diff --git
> >>>> a/testcases/commands/unshare/unshare01.sh
> >>>> b/testcases/commands/unshare/unshare01.sh
> >>>> index bf163a7f4..e1fb15035 100755
> >>>> --- a/testcases/commands/unshare/unshare01.sh
> >>>> +++ b/testcases/commands/unshare/unshare01.sh
> >>>> @@ -31,7 +31,6 @@ TST_SETUP=setup
> >>>> TST_CLEANUP=cleanup
> >>>> TST_TESTFUNC=do_test
> >>>> TST_NEEDS_ROOT=1
> >>>> -TST_NEEDS_TMPDIR=1
> >>> You still need TST_NEEDS_TMPDIR=1, because you create files and
> >> directories.
> >>> Also your patch breaks bind test on very old systems (kernel 2.6,
> >>> util-linux 2.17.2, glibc 2.12):
> >>> unshare01 5 TFAIL: unshare --mount mount --bind dir_A dir_B got
> bind
> >>> info
> >>>
> >>> Any idea why (how to avoid this regression)?
> >>>
> >>>> TST_NEEDS_CMDS="unshare id mount umount"
> >>>> . tst_test.sh
> >>>> @@ -39,6 +38,7 @@
> >> max_userns_path="/proc/sys/user/max_user_namespaces"
> >>>> max_mntns_path="/proc/sys/user/max_mnt_namespaces"
> >>>> default_max_userns=-1
> >>>> default_max_mntns=-1
> >>>> +CURR=$(pwd)
> >>> Instead of $CURR, cd - can be used.
> >>>
> >>>> setup()
> >>>> {
> >>>> @@ -55,6 +55,10 @@ setup()
> >>>> echo 1024> "${max_mntns_path}"
> >>>> fi
> >>>> + mkdir $CURR/dir_C
> >>> just mkdir dir_C
> >>>> + mount -t tmpfs none dir_C
> >>>> + mount --make-shared dir_C
> >>> FYI We have tst_mount, but it'd not help much here.
> >>>
> >>>> + cd dir_C
> >>>> mkdir -p dir_A dir_B
> >>>> touch dir_A/A dir_B/B
> >>>> }
> >>>> @@ -66,6 +70,9 @@ cleanup()
> >>>> echo ${default_max_userns}> "${max_userns_path}"
> >>>> [ ${default_max_mntns} -ne -1 ]&& \
> >>>> echo ${default_max_mntns}> "${max_mntns_path}"
> >>>> + cd $CURR
> >>>> + umount dir_C
> >>> tst_umount dir_C
> >>>
> >>>> + rm -rf dir_C
> >>> rm is not needed (cleanup is done automatically).
> >>>> }
> >>>> check_id()
> >>> Full diff of changes I propose below.
> >>>
> >>> Kind regards,
> >>> Petr
> >>>
> >>> diff --git testcases/commands/unshare/unshare01.sh
> >>> testcases/commands/unshare/unshare01.sh
> >>> index e1fb15035..0b5c56811 100755
> >>> --- testcases/commands/unshare/unshare01.sh
> >>> +++ testcases/commands/unshare/unshare01.sh
> >>> @@ -31,6 +31,7 @@ TST_SETUP=setup
> >>> TST_CLEANUP=cleanup
> >>> TST_TESTFUNC=do_test
> >>> TST_NEEDS_ROOT=1
> >>> +TST_NEEDS_TMPDIR=1
> >>> TST_NEEDS_CMDS="unshare id mount umount"
> >>> . tst_test.sh
> >>>
> >>> @@ -38,7 +39,6 @@
> >> max_userns_path="/proc/sys/user/max_user_namespaces"
> >>> max_mntns_path="/proc/sys/user/max_mnt_namespaces"
> >>> default_max_userns=-1
> >>> default_max_mntns=-1
> >>> -CURR=$(pwd)
> >>>
> >>> setup()
> >>> {
> >>> @@ -55,7 +55,7 @@ setup()
> >>> echo 1024> "${max_mntns_path}"
> >>> fi
> >>>
> >>> - mkdir $CURR/dir_C
> >>> + mkdir dir_C
> >>> mount -t tmpfs none dir_C
> >>> mount --make-shared dir_C
> >>> cd dir_C
> >>> @@ -70,9 +70,8 @@ cleanup()
> >>> echo ${default_max_userns}> "${max_userns_path}"
> >>> [ ${default_max_mntns} -ne -1 ]&& \
> >>> echo ${default_max_mntns}> "${max_mntns_path}"
> >>> - cd $CURR
> >>> - umount dir_C
> >>> - rm -rf dir_C
> >>> + cd ->/dev/null
> >>> + tst_umount dir_C
> >>> }
> >>>
> >>> check_id()
> >>>
> >>
> >
> >
> > .
> >
>
>
More information about the ltp
mailing list