git: 9b38ede3a347 - stable/12 - sh: Test that executing various binary files is rejected

Jilles Tjoelker jilles at FreeBSD.org
Sat Jan 30 15:11:44 UTC 2021


The branch stable/12 has been updated by jilles:

URL: https://cgit.FreeBSD.org/src/commit/?id=9b38ede3a347f9ae48d4b80878134f07ccc6845c

commit 9b38ede3a347f9ae48d4b80878134f07ccc6845c
Author:     Jilles Tjoelker <jilles at FreeBSD.org>
AuthorDate: 2019-12-30 21:32:55 +0000
Commit:     Jilles Tjoelker <jilles at FreeBSD.org>
CommitDate: 2021-01-30 15:10:26 +0000

    sh: Test that executing various binary files is rejected
    
    If executing a file fails with an [ENOEXEC] error, the shell executes the
    file as a shell script, except that this execution may instead result in an
    error message if the file is binary.
    
    Per a recent Austin Group interpretation, we will need to change this to
    allow a concatenation of a shell script and a binary payload. See
    Austin Group bugs #1226 and #1250.
    
    MFC after:      1 week
    
    (cherry picked from commit 2a55bade0ed3e08a8c4f922df0ecf67d1ee32f53)
---
 bin/sh/tests/execution/Makefile     |  4 ++++
 bin/sh/tests/execution/shellproc2.0 | 18 ++++++++++++++++++
 bin/sh/tests/execution/shellproc3.0 | 14 ++++++++++++++
 bin/sh/tests/execution/shellproc4.0 | 14 ++++++++++++++
 bin/sh/tests/execution/shellproc5.0 | 14 ++++++++++++++
 5 files changed, 64 insertions(+)

diff --git a/bin/sh/tests/execution/Makefile b/bin/sh/tests/execution/Makefile
index 064afdbf736c..bd6b2e06d55e 100644
--- a/bin/sh/tests/execution/Makefile
+++ b/bin/sh/tests/execution/Makefile
@@ -56,6 +56,10 @@ ${PACKAGE}FILES+=		set-x2.0
 ${PACKAGE}FILES+=		set-x3.0
 ${PACKAGE}FILES+=		set-x4.0
 ${PACKAGE}FILES+=		shellproc1.0
+${PACKAGE}FILES+=		shellproc2.0
+${PACKAGE}FILES+=		shellproc3.0
+${PACKAGE}FILES+=		shellproc4.0
+${PACKAGE}FILES+=		shellproc5.0
 ${PACKAGE}FILES+=		subshell1.0 subshell1.0.stdout
 ${PACKAGE}FILES+=		subshell2.0
 ${PACKAGE}FILES+=		subshell3.0
diff --git a/bin/sh/tests/execution/shellproc2.0 b/bin/sh/tests/execution/shellproc2.0
new file mode 100644
index 000000000000..85e768070022
--- /dev/null
+++ b/bin/sh/tests/execution/shellproc2.0
@@ -0,0 +1,18 @@
+# $FreeBSD$
+# This tests a quality of implementation issue.
+# Shells are not required to reject executing binary files as shell scripts
+# but executing, for example, ELF files for a different architecture as
+# shell scripts may have annoying side effects.
+
+T=`mktemp -d "${TMPDIR:-/tmp}/sh-test.XXXXXXXX"` || exit
+trap 'rm -rf "${T}"' 0
+printf '\0' >"$T/testshellproc"
+chmod 755 "$T/testshellproc"
+if [ ! -s "$T/testshellproc" ]; then
+	printf "printf did not write a NUL character\n" >&2
+	exit 2
+fi
+PATH=$T:$PATH
+errout=`testshellproc 3>&2 2>&1 >&3 3>&-`
+r=$?
+[ "$r" = 126 ] && [ -n "$errout" ]
diff --git a/bin/sh/tests/execution/shellproc3.0 b/bin/sh/tests/execution/shellproc3.0
new file mode 100644
index 000000000000..6ad455f2cd77
--- /dev/null
+++ b/bin/sh/tests/execution/shellproc3.0
@@ -0,0 +1,14 @@
+# $FreeBSD$
+# This tests a quality of implementation issue.
+# Shells are not required to reject executing binary files as shell scripts
+# but executing, for example, ELF files for a different architecture as
+# shell scripts may have annoying side effects.
+
+T=`mktemp -d "${TMPDIR:-/tmp}/sh-test.XXXXXXXX"` || exit
+trap 'rm -rf "${T}"' 0
+printf '\177ELF\001!!\011\0\0\0\0\0\0\0\0' >"$T/testshellproc"
+chmod 755 "$T/testshellproc"
+PATH=$T:$PATH
+errout=`testshellproc 3>&2 2>&1 >&3 3>&-`
+r=$?
+[ "$r" = 126 ] && [ -n "$errout" ]
diff --git a/bin/sh/tests/execution/shellproc4.0 b/bin/sh/tests/execution/shellproc4.0
new file mode 100644
index 000000000000..fcc72eef073c
--- /dev/null
+++ b/bin/sh/tests/execution/shellproc4.0
@@ -0,0 +1,14 @@
+# $FreeBSD$
+# This tests a quality of implementation issue.
+# Shells are not required to reject executing binary files as shell scripts
+# but executing, for example, ELF files for a different architecture as
+# shell scripts may have annoying side effects.
+
+T=`mktemp -d "${TMPDIR:-/tmp}/sh-test.XXXXXXXX"` || exit
+trap 'rm -rf "${T}"' 0
+printf '\211PNG\015\012\032\012\0\0\0\015IHDR' >"$T/testshellproc"
+chmod 755 "$T/testshellproc"
+PATH=$T:$PATH
+errout=`testshellproc 3>&2 2>&1 >&3 3>&-`
+r=$?
+[ "$r" = 126 ] && [ -n "$errout" ]
diff --git a/bin/sh/tests/execution/shellproc5.0 b/bin/sh/tests/execution/shellproc5.0
new file mode 100644
index 000000000000..c25ffe3e4693
--- /dev/null
+++ b/bin/sh/tests/execution/shellproc5.0
@@ -0,0 +1,14 @@
+# $FreeBSD$
+# This tests a quality of implementation issue.
+# Shells are not required to reject executing binary files as shell scripts
+# but executing, for example, ELF files for a different architecture as
+# shell scripts may have annoying side effects.
+
+T=`mktemp -d "${TMPDIR:-/tmp}/sh-test.XXXXXXXX"` || exit
+trap 'rm -rf "${T}"' 0
+printf '\177ELF\001!!\012\0\0\0\0\0\0\0\0' >"$T/testshellproc"
+chmod 755 "$T/testshellproc"
+PATH=$T:$PATH
+errout=`testshellproc 3>&2 2>&1 >&3 3>&-`
+r=$?
+[ "$r" = 126 ] && [ -n "$errout" ]


More information about the dev-commits-src-branches mailing list