From: Amir Goldstein <amir73il@gmail.com>
To: Eryu Guan <guaneryu@gmail.com>
Cc: Miklos Szeredi <miklos@szeredi.hu>,
Icenowy Zheng <icenowy@aosc.io>,
Chengguang Xu <cgxu519@mykernel.net>,
linux-unionfs@vger.kernel.org, fstests@vger.kernel.org
Subject: [PATCH v2 4/5] overlay: Test lost immutable/append-only flags on copy-up
Date: Wed, 10 Feb 2021 21:03:33 +0200 [thread overview]
Message-ID: <20210210190334.1212210-5-amir73il@gmail.com> (raw)
In-Reply-To: <20210210190334.1212210-1-amir73il@gmail.com>
Chengguang Xu reported [1] that append-only flag is lost on copy-up.
I had noticed that for directories, immutable flag can also be lost on
copy up (when parent is copied up). That's an old overlayfs bug.
[1] https://lore.kernel.org/linux-unionfs/20201226104618.239739-1-cgxu519@mykernel.net/
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
---
tests/overlay/075 | 92 +++++++++++++++++++++++++++++++++++++++++++
tests/overlay/075.out | 11 ++++++
tests/overlay/group | 1 +
3 files changed, 104 insertions(+)
create mode 100755 tests/overlay/075
create mode 100644 tests/overlay/075.out
diff --git a/tests/overlay/075 b/tests/overlay/075
new file mode 100755
index 00000000..5a6c3be0
--- /dev/null
+++ b/tests/overlay/075
@@ -0,0 +1,92 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (C) 2021 CTERA Networks. All Rights Reserved.
+#
+# FS QA Test No. 075
+#
+# Run the t_immutable test program for immutable/append-only files
+# and directories that exist in overlayfs lower layer.
+#
+# This test is similar and was derived from generic/079, but instead
+# of creating new files which are created in upper layer, prepare
+# the test area in lower layer before running the t_immutable test on
+# the overlayfs mount.
+#
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+here=`pwd`
+timmutable=$here/src/t_immutable
+lowerdir=$OVL_BASE_SCRATCH_MNT/$OVL_LOWER
+upperdir=$OVL_BASE_SCRATCH_MNT/$OVL_UPPER
+tmp=/tmp/$$
+status=1 # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+ # -r will fail to remove test dirs, because we added subdirs
+ # we just need to remove the flags so use -R
+ $timmutable -R $upperdir/testdir &> /dev/null
+ $timmutable -R $lowerdir/testdir &> /dev/null
+ rm -f $tmp.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+_supported_fs overlay
+
+_require_chattr ia
+_require_test_program "t_immutable"
+_require_scratch
+
+_scratch_mkfs
+
+# Preparing test area files in lower dir and check chattr support of base fs
+mkdir -p $lowerdir
+mkdir -p $upperdir
+$timmutable -C $lowerdir/testdir >$tmp.out 2>&1
+if grep -q -e 'Operation not supported' -e "Inappropriate ioctl" $tmp.out; then
+ _notrun "Setting immutable/append flag not supported"
+fi
+# Remove the immutable/append-only flags and create subdirs
+$timmutable -R $lowerdir/testdir >$tmp.out 2>&1
+for dir in $lowerdir/testdir/*.d; do
+ mkdir $dir/subdir
+done
+# Restore the immutable/append-only flags
+$timmutable -C $lowerdir/testdir >$tmp.out 2>&1
+
+_scratch_mount
+
+# Test immutability of files in overlay
+echo "Before directories copy up"
+$timmutable $SCRATCH_MNT/testdir 2>&1
+
+# Trigger copy-up of immutable/append-only dirs by touching their subdirs
+# inode flags are not copied-up, so immutable/append-only flags are lost
+for dir in $SCRATCH_MNT/testdir/*.d; do
+ touch $dir/subdir
+done
+
+# Trigger copy-up of append-only files by touching them
+# inode flags are not copied-up, so append-only flags are lost
+# touch on the immutable files is expected to fail, so immutable
+# flags will not be lost
+for file in $SCRATCH_MNT/testdir/*.f; do
+ touch $file > /dev/null 2>&1
+done
+
+# immutable/append-only flags still exist on the overlay in-core inode
+# After mount cycle, flags are forever lost
+_scratch_cycle_mount
+
+# Test immutability of files in overlay after directories copy-up
+echo "After directories copy up"
+$timmutable $SCRATCH_MNT/testdir 2>&1
+
+status=$?
+exit
diff --git a/tests/overlay/075.out b/tests/overlay/075.out
new file mode 100644
index 00000000..ab39c6b8
--- /dev/null
+++ b/tests/overlay/075.out
@@ -0,0 +1,11 @@
+QA output created by 075
+Before directories copy up
+testing immutable...PASS.
+testing append-only...PASS.
+testing immutable as non-root...PASS.
+testing append-only as non-root...PASS.
+After directories copy up
+testing immutable...PASS.
+testing append-only...PASS.
+testing immutable as non-root...PASS.
+testing append-only as non-root...PASS.
diff --git a/tests/overlay/group b/tests/overlay/group
index 047ea046..cfc75bb1 100644
--- a/tests/overlay/group
+++ b/tests/overlay/group
@@ -77,6 +77,7 @@
072 auto quick copyup hardlink
073 auto quick whiteout
074 auto quick exportfs dangerous
+075 auto quick perms
100 auto quick union samefs
101 auto quick union nonsamefs
102 auto quick union nonsamefs xino
--
2.25.1
next prev parent reply other threads:[~2021-02-10 19:05 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-10 19:03 [PATCH v2 0/5] Tests for overlayfs immutable/append-only files Amir Goldstein
2021-02-10 19:03 ` [PATCH v2 1/5] overlay/030: Update comment w.r.t upstream kernel Amir Goldstein
2021-02-10 19:03 ` [PATCH v2 2/5] src/t_immutable: factor out some helpers Amir Goldstein
2021-02-10 19:03 ` [PATCH v2 3/5] src/t_immutable: Allow setting flags on existing files Amir Goldstein
2021-02-10 19:03 ` Amir Goldstein [this message]
2021-02-10 19:03 ` [PATCH v2 5/5] overlay: Regression test for deadlock on directory ioctl Amir Goldstein
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210210190334.1212210-5-amir73il@gmail.com \
--to=amir73il@gmail.com \
--cc=cgxu519@mykernel.net \
--cc=fstests@vger.kernel.org \
--cc=guaneryu@gmail.com \
--cc=icenowy@aosc.io \
--cc=linux-unionfs@vger.kernel.org \
--cc=miklos@szeredi.hu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).