about summary refs log tree commit diff
path: root/tools
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2014-01-15 22:29:13 -0500
committerRich Felker <dalias@aerifal.cx>2014-01-15 22:29:13 -0500
commit7cbb6f70c8fe711644ec0dbede1973cc6641a283 (patch)
tree8142a648520c8deffe9259c91ba704084e1dfea6 /tools
parent50a50988d512f4e3a0e9c41227d5befa3b92540d (diff)
downloadmusl-7cbb6f70c8fe711644ec0dbede1973cc6641a283.tar.gz
musl-7cbb6f70c8fe711644ec0dbede1973cc6641a283.tar.xz
musl-7cbb6f70c8fe711644ec0dbede1973cc6641a283.zip
fix system breakage window during make install due to permissions
install.sh was wrongly waiting until after atomically replacing the
old file to set the correct permissions on the new file. in the case
of the dynamic linker, this would cause a dynamic-linked chmod command
not to run (due to missing executable permissions on the dynamic
linker) and thus leave the system in an unusable state.

even if chmod is static-linked, the old behavior had a race window
where dynamic-linked programs could fail to run.
Diffstat (limited to 'tools')
-rwxr-xr-xtools/install.sh3
1 files changed, 1 insertions, 2 deletions
diff --git a/tools/install.sh b/tools/install.sh
index 4e5a8b9f..d913b60b 100755
--- a/tools/install.sh
+++ b/tools/install.sh
@@ -51,6 +51,7 @@ if test "$symlink" ; then
 ln -s "$1" "$tmp"
 else
 cat < "$1" > "$tmp"
+chmod "$mode" "$tmp"
 fi
 
 mv -f "$tmp" "$2"
@@ -60,6 +61,4 @@ printf "%s: %s is a directory\n" "$0" "$dst" 1>&2
 exit 1
 }
 
-test "$symlink" || chmod "$mode" "$2"
-
 exit 0