* [PATCH 1/3] overlay: dump overlay private xattr
@ 2016-07-25 17:27 Eryu Guan
2016-07-25 17:27 ` [PATCH 2/3] overlay: remove stale file from upperdir Eryu Guan
2016-07-25 17:27 ` [PATCH 3/3] overlay: truncate running binaries from lower and upper dirs Eryu Guan
0 siblings, 2 replies; 4+ messages in thread
From: Eryu Guan @ 2016-07-25 17:27 UTC (permalink / raw)
To: fstests; +Cc: linux-unionfs, xzhou, Eryu Guan
Test dump overlay private xattr on overlayfs with multiple lower
dirs. All the lower layers, except the lowest one, should honor
overlay private xattr "trusted.overlay", which means it should not
be visible to user.
Commit b581755b1c56 ("ovl: xattr filter fix") fixed this issue.
Signed-off-by: Eryu Guan <eguan@redhat.com>
---
tests/overlay/011 | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++
tests/overlay/011.out | 2 ++
tests/overlay/group | 1 +
3 files changed, 82 insertions(+)
create mode 100755 tests/overlay/011
create mode 100644 tests/overlay/011.out
diff --git a/tests/overlay/011 b/tests/overlay/011
new file mode 100755
index 0000000..4b697b8
--- /dev/null
+++ b/tests/overlay/011
@@ -0,0 +1,79 @@
+#! /bin/bash
+# FS QA Test 011
+#
+# test overlay private xattr on overlayfs with multiple lower dirs, all the
+# lower layers except the lowest one should honor overlay private xattr
+# "trusted.overlay", which means it should not be visible to user.
+#
+# Commit b581755b1c56 ("ovl: xattr filter fix") fixed this issue.
+#
+#-----------------------------------------------------------------------
+# 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.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+. ./common/attr
+
+rm -f $seqres.full
+
+# real QA test starts here
+_supported_fs overlay
+_supported_os Linux
+_require_test
+_require_scratch
+_require_attrs
+
+# Remove all files from previous tests
+_scratch_mkfs
+
+# Create test dir on upper and make it opaque by setting proper xattr
+lowerdir=$SCRATCH_DEV/$OVERLAY_LOWER_DIR
+upperdir=$SCRATCH_DEV/$OVERLAY_UPPER_DIR
+mkdir -p $lowerdir/testdir
+mkdir -p $upperdir/testdir
+$SETFATTR_PROG -n "trusted.overlay.opaque" -v "y" $upperdir/testdir
+
+# mount overlay with multiple lowerdirs, with $lowerdir as the lowest dir and
+# $upperdir overlaid on top of $lowerdir, so that "trusted.overlay.opaque"
+# xattr should be honored and should not be listed
+# mount readonly, because there's no upper and workdir
+$MOUNT_PROG -t overlay -o ro -o lowerdir=$upperdir:$lowerdir none $SCRATCH_MNT
+
+# Dump trusted.overlay xattr, we should not see the "opaque" xattr
+$GETFATTR_PROG -d -m overlay $SCRATCH_MNT/testdir
+echo "Silence is golden"
+
+# success, all done
+status=0
+exit
diff --git a/tests/overlay/011.out b/tests/overlay/011.out
new file mode 100644
index 0000000..62e0251
--- /dev/null
+++ b/tests/overlay/011.out
@@ -0,0 +1,2 @@
+QA output created by 011
+Silence is golden
diff --git a/tests/overlay/group b/tests/overlay/group
index 06cdb7e..acd8ac4 100644
--- a/tests/overlay/group
+++ b/tests/overlay/group
@@ -13,3 +13,4 @@
008 auto quick whiteout
009 auto quick
010 auto quick whiteout
+011 auto quick
--
2.7.4
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH 2/3] overlay: remove stale file from upperdir
2016-07-25 17:27 [PATCH 1/3] overlay: dump overlay private xattr Eryu Guan
@ 2016-07-25 17:27 ` Eryu Guan
2016-07-25 17:27 ` [PATCH 3/3] overlay: truncate running binaries from lower and upper dirs Eryu Guan
1 sibling, 0 replies; 4+ messages in thread
From: Eryu Guan @ 2016-07-25 17:27 UTC (permalink / raw)
To: fstests; +Cc: linux-unionfs, xzhou, Eryu Guan
The upper dentry may become stale before we remove it from overlay,
e.g. file was removed from upperdir directly, which triggered
warning/oops in ovl_remove_and_whiteout().
Commit cfc9fde0b07c ("ovl: verify upper dentry in
ovl_remove_and_whiteout()") fixed this issue.
Signed-off-by: Eryu Guan <eguan@redhat.com>
---
tests/overlay/012 | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++
tests/overlay/012.out | 2 ++
tests/overlay/group | 1 +
3 files changed, 80 insertions(+)
create mode 100755 tests/overlay/012
create mode 100644 tests/overlay/012.out
diff --git a/tests/overlay/012 b/tests/overlay/012
new file mode 100755
index 0000000..cfe16f2
--- /dev/null
+++ b/tests/overlay/012
@@ -0,0 +1,77 @@
+#! /bin/bash
+# FS QA Test 012
+#
+# The upper dentry may become stale before we remove it from
+# overlay, e.g. file was removed from upperdir directly, which
+# triggered warning/oops in ovl_remove_and_whiteout().
+#
+# Commit cfc9fde0b07c ("ovl: verify upper dentry in
+# ovl_remove_and_whiteout()") fixed this issue.
+#
+#-----------------------------------------------------------------------
+# 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.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+rm -f $seqres.full
+
+# real QA test starts here
+_supported_fs overlay
+_supported_os Linux
+_require_scratch
+
+# remove all files from previous runs
+_scratch_mkfs
+
+lowerdir=$SCRATCH_DEV/$OVERLAY_LOWER_DIR
+upperdir=$SCRATCH_DEV/$OVERLAY_UPPER_DIR
+mkdir -p $lowerdir/test
+
+_scratch_mount
+
+# remove test file to create a whiteout
+rmdir $SCRATCH_MNT/test
+
+# create the test file again and remove it from upperdir directly, make the
+# upper dentry become stale
+touch $SCRATCH_MNT/test
+rm $upperdir/test
+# try to remove test file from overlay dir, trigger ovl_remove_and_whiteout, it
+# should see stale file handle error, and no warnings/oops are expected.
+rm $SCRATCH_MNT/test 2>&1 | _filter_scratch
+
+# success, all done
+status=0
+exit
diff --git a/tests/overlay/012.out b/tests/overlay/012.out
new file mode 100644
index 0000000..1bfa147
--- /dev/null
+++ b/tests/overlay/012.out
@@ -0,0 +1,2 @@
+QA output created by 012
+rm: cannot remove 'SCRATCH_MNT/test': Stale file handle
diff --git a/tests/overlay/group b/tests/overlay/group
index acd8ac4..103e2e1 100644
--- a/tests/overlay/group
+++ b/tests/overlay/group
@@ -14,3 +14,4 @@
009 auto quick
010 auto quick whiteout
011 auto quick
+012 auto quick
--
2.7.4
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH 3/3] overlay: truncate running binaries from lower and upper dirs
2016-07-25 17:27 [PATCH 1/3] overlay: dump overlay private xattr Eryu Guan
2016-07-25 17:27 ` [PATCH 2/3] overlay: remove stale file from upperdir Eryu Guan
@ 2016-07-25 17:27 ` Eryu Guan
2016-07-26 3:47 ` Xiong Zhou
1 sibling, 1 reply; 4+ messages in thread
From: Eryu Guan @ 2016-07-25 17:27 UTC (permalink / raw)
To: fstests; +Cc: linux-unionfs, xzhou, Eryu Guan
Test truncate running executable binaries from lower and upper dirs.
truncate(2) should return ETXTBSY, not other errno nor segfault
Commit 03bea6040932 ("ovl: get_write_access() in truncate") fixed
this issue.
Signed-off-by: Eryu Guan <eguan@redhat.com>
---
.gitignore | 1 +
src/Makefile | 2 +-
src/t_truncate_self.c | 20 ++++++++++++++
tests/overlay/013 | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++
tests/overlay/013.out | 2 ++
tests/overlay/group | 1 +
6 files changed, 99 insertions(+), 1 deletion(-)
create mode 100644 src/t_truncate_self.c
create mode 100755 tests/overlay/013
create mode 100644 tests/overlay/013.out
diff --git a/.gitignore b/.gitignore
index 28bd180..07f81e8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -99,6 +99,7 @@
/src/t_mtab
/src/t_stripealign
/src/t_truncate_cmtime
+/src/t_truncate_self
/src/test-nextquota
/src/testx
/src/trunc
diff --git a/src/Makefile b/src/Makefile
index 1bf318b..39362d9 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -12,7 +12,7 @@ TARGETS = dirstress fill fill2 getpagesize holes lstat64 \
godown resvtest writemod makeextents itrash rename \
multi_open_unlink dmiperf unwritten_sync genhashnames t_holes \
t_mmap_writev t_truncate_cmtime dirhash_collide t_rename_overwrite \
- holetest
+ holetest t_truncate_self
LINUX_TARGETS = xfsctl bstat t_mtab getdevicesize preallo_rw_pattern_reader \
preallo_rw_pattern_writer ftrunc trunc fs_perms testx looptest \
diff --git a/src/t_truncate_self.c b/src/t_truncate_self.c
new file mode 100644
index 0000000..d14dec3
--- /dev/null
+++ b/src/t_truncate_self.c
@@ -0,0 +1,20 @@
+#include <stdio.h>
+#include <errno.h>
+#include <unistd.h>
+
+int main(int argc, char *argv[])
+{
+ int ret;
+
+ ret = truncate(argv[0], 4096);
+ if (ret != -1) {
+ fprintf(stderr, "truncate(argv[0]) should have failed\n");
+ return 1;
+ }
+ if (errno != ETXTBSY) {
+ perror("truncate(argv[0])");
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/tests/overlay/013 b/tests/overlay/013
new file mode 100755
index 0000000..09f3eb1
--- /dev/null
+++ b/tests/overlay/013
@@ -0,0 +1,74 @@
+#! /bin/bash
+# FS QA Test 013
+#
+# Test truncate running executable binaries from lower and upper dirs.
+# truncate(2) should return ETXTBSY, not other errno nor segfault
+#
+# Commit 03bea6040932 ("ovl: get_write_access() in truncate") fixed this issue.
+#-----------------------------------------------------------------------
+# 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.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+rm -f $seqres.full
+
+# real QA test starts here
+_supported_fs overlay
+_supported_os Linux
+_require_scratch
+_require_test_program "t_truncate_self"
+
+# remove all files from previous runs
+_scratch_mkfs
+
+# copy test program to lower and upper dir
+lowerdir=$SCRATCH_DEV/$OVERLAY_LOWER_DIR
+upperdir=$SCRATCH_DEV/$OVERLAY_UPPER_DIR
+mkdir -p $lowerdir
+mkdir -p $upperdir
+cp $here/src/t_truncate_self $lowerdir/test_lower
+cp $here/src/t_truncate_self $lowerdir/test_upper
+
+_scratch_mount
+
+# run test program from lower and upper dir
+# test programs truncate themselfs, all should fail with ETXTBSY
+$SCRATCH_MNT/test_lower
+$SCRATCH_MNT/test_upper
+
+# success, all done
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/overlay/013.out b/tests/overlay/013.out
new file mode 100644
index 0000000..3e66423
--- /dev/null
+++ b/tests/overlay/013.out
@@ -0,0 +1,2 @@
+QA output created by 013
+Silence is golden
diff --git a/tests/overlay/group b/tests/overlay/group
index 103e2e1..5c80566 100644
--- a/tests/overlay/group
+++ b/tests/overlay/group
@@ -15,3 +15,4 @@
010 auto quick whiteout
011 auto quick
012 auto quick
+013 auto quick
--
2.7.4
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH 3/3] overlay: truncate running binaries from lower and upper dirs
2016-07-25 17:27 ` [PATCH 3/3] overlay: truncate running binaries from lower and upper dirs Eryu Guan
@ 2016-07-26 3:47 ` Xiong Zhou
0 siblings, 0 replies; 4+ messages in thread
From: Xiong Zhou @ 2016-07-26 3:47 UTC (permalink / raw)
To: Eryu Guan; +Cc: fstests, linux-unionfs, xzhou
On Tue, Jul 26, 2016 at 01:27:50AM +0800, Eryu Guan wrote:
> Test truncate running executable binaries from lower and upper dirs.
> truncate(2) should return ETXTBSY, not other errno nor segfault
Tested and ack, for the series.
Thanks,
Xiong
>
> Commit 03bea6040932 ("ovl: get_write_access() in truncate") fixed
> this issue.
>
> Signed-off-by: Eryu Guan <eguan@redhat.com>
> ---
> .gitignore | 1 +
> src/Makefile | 2 +-
> src/t_truncate_self.c | 20 ++++++++++++++
> tests/overlay/013 | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++
> tests/overlay/013.out | 2 ++
> tests/overlay/group | 1 +
> 6 files changed, 99 insertions(+), 1 deletion(-)
> create mode 100644 src/t_truncate_self.c
> create mode 100755 tests/overlay/013
> create mode 100644 tests/overlay/013.out
>
> diff --git a/.gitignore b/.gitignore
> index 28bd180..07f81e8 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -99,6 +99,7 @@
> /src/t_mtab
> /src/t_stripealign
> /src/t_truncate_cmtime
> +/src/t_truncate_self
> /src/test-nextquota
> /src/testx
> /src/trunc
> diff --git a/src/Makefile b/src/Makefile
> index 1bf318b..39362d9 100644
> --- a/src/Makefile
> +++ b/src/Makefile
> @@ -12,7 +12,7 @@ TARGETS = dirstress fill fill2 getpagesize holes lstat64 \
> godown resvtest writemod makeextents itrash rename \
> multi_open_unlink dmiperf unwritten_sync genhashnames t_holes \
> t_mmap_writev t_truncate_cmtime dirhash_collide t_rename_overwrite \
> - holetest
> + holetest t_truncate_self
>
> LINUX_TARGETS = xfsctl bstat t_mtab getdevicesize preallo_rw_pattern_reader \
> preallo_rw_pattern_writer ftrunc trunc fs_perms testx looptest \
> diff --git a/src/t_truncate_self.c b/src/t_truncate_self.c
> new file mode 100644
> index 0000000..d14dec3
> --- /dev/null
> +++ b/src/t_truncate_self.c
> @@ -0,0 +1,20 @@
> +#include <stdio.h>
> +#include <errno.h>
> +#include <unistd.h>
> +
> +int main(int argc, char *argv[])
> +{
> + int ret;
> +
> + ret = truncate(argv[0], 4096);
> + if (ret != -1) {
> + fprintf(stderr, "truncate(argv[0]) should have failed\n");
> + return 1;
> + }
> + if (errno != ETXTBSY) {
> + perror("truncate(argv[0])");
> + return 1;
> + }
> +
> + return 0;
> +}
> diff --git a/tests/overlay/013 b/tests/overlay/013
> new file mode 100755
> index 0000000..09f3eb1
> --- /dev/null
> +++ b/tests/overlay/013
> @@ -0,0 +1,74 @@
> +#! /bin/bash
> +# FS QA Test 013
> +#
> +# Test truncate running executable binaries from lower and upper dirs.
> +# truncate(2) should return ETXTBSY, not other errno nor segfault
> +#
> +# Commit 03bea6040932 ("ovl: get_write_access() in truncate") fixed this issue.
> +#-----------------------------------------------------------------------
> +# 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.*
> +}
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +. ./common/filter
> +
> +rm -f $seqres.full
> +
> +# real QA test starts here
> +_supported_fs overlay
> +_supported_os Linux
> +_require_scratch
> +_require_test_program "t_truncate_self"
> +
> +# remove all files from previous runs
> +_scratch_mkfs
> +
> +# copy test program to lower and upper dir
> +lowerdir=$SCRATCH_DEV/$OVERLAY_LOWER_DIR
> +upperdir=$SCRATCH_DEV/$OVERLAY_UPPER_DIR
> +mkdir -p $lowerdir
> +mkdir -p $upperdir
> +cp $here/src/t_truncate_self $lowerdir/test_lower
> +cp $here/src/t_truncate_self $lowerdir/test_upper
> +
> +_scratch_mount
> +
> +# run test program from lower and upper dir
> +# test programs truncate themselfs, all should fail with ETXTBSY
> +$SCRATCH_MNT/test_lower
> +$SCRATCH_MNT/test_upper
> +
> +# success, all done
> +echo "Silence is golden"
> +status=0
> +exit
> diff --git a/tests/overlay/013.out b/tests/overlay/013.out
> new file mode 100644
> index 0000000..3e66423
> --- /dev/null
> +++ b/tests/overlay/013.out
> @@ -0,0 +1,2 @@
> +QA output created by 013
> +Silence is golden
> diff --git a/tests/overlay/group b/tests/overlay/group
> index 103e2e1..5c80566 100644
> --- a/tests/overlay/group
> +++ b/tests/overlay/group
> @@ -15,3 +15,4 @@
> 010 auto quick whiteout
> 011 auto quick
> 012 auto quick
> +013 auto quick
> --
> 2.7.4
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-07-26 3:47 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-25 17:27 [PATCH 1/3] overlay: dump overlay private xattr Eryu Guan
2016-07-25 17:27 ` [PATCH 2/3] overlay: remove stale file from upperdir Eryu Guan
2016-07-25 17:27 ` [PATCH 3/3] overlay: truncate running binaries from lower and upper dirs Eryu Guan
2016-07-26 3:47 ` Xiong Zhou
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).