mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
aa96e42b8d
Commit 4d0c5ba (vfs: do get_write_access() on upper layer of overlayfs) that was merged for kernel v4.8 changes the behavior of execve+truncate in a subtle way. When file is executed from lower and then truncated, the truncation is allowed, becasue it only affects the size of the copied up file and does not affect the VM mapping of the executed lower file. Signed-off-by: Amir Goldstein <amir73il@gmail.com> Reviewed-by: Eryu Guan <eguan@redhat.com> Signed-off-by: Eryu Guan <eguan@redhat.com>
74 lines
2.0 KiB
Bash
Executable File
74 lines
2.0 KiB
Bash
Executable File
#! /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 $upperdir/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
|
|
status=0
|
|
exit
|