[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