Better handle filesystems mounted with -o noexec

ftruncate/11, open/20, and truncate/11 copy sleep(1) to a temporary file on the
target filesystem, execute the binary, then expect a result. This doesn't work
with scenarios where the target binary cannot be executed, e.g. the filesystem
was mounted with -o noexec.

Ensure the filesystem hasn't been mounted with -o noexec for the testcases
before executing them.

Differential Revision: https://reviews.freebsd.org/D5622
MFC after: 1 week
Reviewed by: markj
Sponsored by: EMC / Isilon Storage Division
This commit is contained in:
Enji Cooper 2016-03-12 19:41:38 +00:00
parent cb1469fdd6
commit 45dc13f1ea
4 changed files with 40 additions and 0 deletions

View File

@ -8,6 +8,8 @@ dir=`dirname $0`
[ "${os}" = "FreeBSD" ] || quick_exit
requires_exec
echo "1..2"
n0=`namegen`

View File

@ -219,3 +219,37 @@ create_file() {
expect 0 lchmod ${name} ${3}
fi
}
# Tests for whether or not a filesystem is mounted with a particular option
# with -o, e.g. `mount -o noexec`.
#
# Parameters:
# - mount_option - noatime, noexec, etc.
#
# Returns:
# - 0 if mounted with the option.
# - 1 otherwise.
has_mount_option()
{
local IFS=,
local mount_opt
local mount_option_search=$1
# XXX: mountpoint is defined in .../tests/sys/pjdfstest/tests/conf
for mount_opt in $(mount -d -p | awk '$2 == "'$mountpoint'" { print $4 }'); do
if [ "$mount_opt" = "$mount_option_search" ]; then
return 0
fi
done
return 1
}
# Filesystem must be mounted with -o exec
requires_exec()
{
if has_mount_option noexec; then
echo "1..0 # SKIP filesystem mounted with -o noexec"
exit 0
fi
}

View File

@ -8,6 +8,8 @@ dir=`dirname $0`
[ "${os}:${fs}" = "FreeBSD:UFS" ] || quick_exit
requires_exec
echo "1..4"
n0=`namegen`

View File

@ -8,6 +8,8 @@ dir=`dirname $0`
[ "${os}" = "FreeBSD" ] || quick_exit
requires_exec
echo "1..2"
n0=`namegen`