[all-commits] [llvm/llvm-project] c2a847: [llvm-objcopy] preserve file ownership when overwr...
Jian Cai via All-commits
all-commits at lists.llvm.org
Fri Feb 12 18:02:09 PST 2021
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: c2a84771bb63947695ea50b89160c02b36fb634d
https://github.com/llvm/llvm-project/commit/c2a84771bb63947695ea50b89160c02b36fb634d
Author: Jian Cai <jiancai at google.com>
Date: 2021-02-12 (Fri, 12 Feb 2021)
Changed paths:
M llvm/include/llvm/Support/FileOutputBuffer.h
M llvm/include/llvm/Support/FileSystem.h
M llvm/lib/Support/FileOutputBuffer.cpp
M llvm/lib/Support/Unix/Path.inc
M llvm/tools/llvm-objcopy/Buffer.cpp
M llvm/tools/llvm-objcopy/Buffer.h
M llvm/tools/llvm-objcopy/llvm-objcopy.cpp
Log Message:
-----------
[llvm-objcopy] preserve file ownership when overwritten by root
As of binutils 2.36, GNU strip calls chown(2) for "sudo strip foo" and
"sudo strip foo -o foo", but no "sudo strip foo -o bar" or "sudo strip
foo -o ./foo". In other words, while "sudo strip foo -o bar" creates a
new file bar with root access, "sudo strip foo" will keep the owner and
group of foo unchanged. Currently llvm-objcopy and llvm-strip behave
differently, always changing the owner and gropu to root. The
discrepancy prevents Chrome OS from migrating to llvm-objcopy and
llvm-strip as they change file ownership and cause intended users/groups
to lose access when invoked by sudo with the following sequence
(recommended in man page of GNU strip).
1.<Link the executable as normal.>
1.<Copy "foo" to "foo.full">
1.<Run "strip --strip-debug foo">
1.<Run "objcopy --add-gnu-debuglink=foo.full foo">
This patch makes llvm-objcopy and llvm-strip follow GNU's behavior.
Link: crbug.com/1108880
More information about the All-commits
mailing list