Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2021-02-07 23:09:42 -0500
committerAllan McRae <allan@archlinux.org>2021-02-08 14:22:55 +1000
commit88d054093c1c99a697d95b26bd9aad5bc4d8e170 (patch)
tree77395a5c18d560c2e9a007ef6036dcff200e0a72
parentab549c846707230e44e2b7e08c6a04d44af916cd (diff)
makepkg: don't let the strip routine mess up file attributes
It updates the stripped/objcopied file by creating a temp file, chown/chmodding it, and replacing the original file. But upstream binutils has CVE-worthy issues with this if running strip as root, and some recent versions of strip don't play nicely with fakeroot. Also, this has always destroyed xattrs. :/ Sidestep the issue by telling strip/objcopy to write to a temporary file, and manually dump the contents of that back into the original binary. Since the original binary is intact, albeit with different contents, it retains its correct attributes in fakeroot. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--scripts/libmakepkg/tidy/strip.sh.in11
1 files changed, 9 insertions, 2 deletions
diff --git a/scripts/libmakepkg/tidy/strip.sh.in b/scripts/libmakepkg/tidy/strip.sh.in
index 868b96f3..9cb0fd8d 100644
--- a/scripts/libmakepkg/tidy/strip.sh.in
+++ b/scripts/libmakepkg/tidy/strip.sh.in
@@ -69,7 +69,10 @@ strip_file() {
# copy debug symbols to debug directory
mkdir -p "$dbgdir/${binary%/*}"
objcopy --only-keep-debug "$binary" "$dbgdir/$binary.debug"
- objcopy --add-gnu-debuglink="$dbgdir/${binary#/}.debug" "$binary"
+ local tempfile=$(mktemp "$binary.XXXXXX")
+ objcopy --add-gnu-debuglink="$dbgdir/${binary#/}.debug" "$binary" "$tempfile"
+ cat "$tempfile" > "$binary"
+ rm "$tempfile"
# create any needed hardlinks
while IFS= read -rd '' file ; do
@@ -93,7 +96,11 @@ strip_file() {
fi
fi
- strip $@ "$binary"
+ local tempfile=$(mktemp "$binary.XXXXXX")
+ if strip "$@" "$binary" -o "$tempfile"; then
+ cat "$tempfile" > "$binary"
+ fi
+ rm -f "$tempfile"
}