From 240eaa6425625f587219ce0cc02801f41c0e4067 Mon Sep 17 00:00:00 2001 From: bol-van Date: Wed, 1 Jun 2022 22:03:27 +0300 Subject: [PATCH] install_bin: glibc execvp calls /bin/sh. use bash if possible --- install_bin.sh | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/install_bin.sh b/install_bin.sh index e553098..ef1cd99 100755 --- a/install_bin.sh +++ b/install_bin.sh @@ -5,6 +5,11 @@ EXEDIR="$(cd "$EXEDIR"; pwd)" BINS=binaries BINDIR="$EXEDIR/$BINS" +exists() +{ + which "$1" >/dev/null 2>/dev/null +} + check_dir() { local dir="$BINDIR/$1" @@ -13,8 +18,15 @@ check_dir() if [ -f "$exe" ]; then if [ -x "$exe" ]; then # ash and dash try to execute invalid executables as a script. they interpret binary garbage with possible negative consequences - # find do not use shell exec - out=$(echo 0.0.0.0 | find "$dir" -maxdepth 1 -name ip2net -exec {} \; 2>/dev/null) + # bash do not do this + if exists bash; then + out=$(echo 0.0.0.0 | bash -c "$exe" 2>/dev/null) + else + # find do not use its own shell exec + # it uses execvp(). in musl libc it does not call shell, in glibc it DOES call /bin/sh + # that's why prefer bash if present + out=$(echo 0.0.0.0 | find "$dir" -maxdepth 1 -name ip2net -exec {} \; 2>/dev/null) + fi [ -n "$out" ] else echo "$exe is not executable. set proper chmod."