[PATCH] D34917: ELF: Only unlink regular files
Tom Stellard via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 30 16:23:11 PDT 2017
tstellar created this revision.
Herald added a subscriber: emaste.
If the output file is a character file (e.g. /dev/null) unlinking it could
potentially destabilize the user's system. For example,
unlinking causes `lld %input -o /dev/null` to replace /dev/null with a
regular file, which will lead to unexpected behavior in other programs
that read from /dev/null, and worse than expected peformance for
programs that write to /dev/null.
This makes it possible to run the test-release.sh script as root.
Prior to this patch, the ELF/basic.s test would replace
/dev/null with a regular file, which would cause crashes in llvm
test-suite programs that piped /dev/null to stdin.
For example, if you run the test-relase.sh script as root,
https://reviews.llvm.org/D34917
Files:
ELF/Filesystem.cpp
Index: ELF/Filesystem.cpp
===================================================================
--- ELF/Filesystem.cpp
+++ ELF/Filesystem.cpp
@@ -38,7 +38,8 @@
// This function spawns a background thread to call unlink.
// The calling thread returns almost immediately.
void elf::unlinkAsync(StringRef Path) {
- if (!Config->Threads || !sys::fs::exists(Config->OutputFile))
+ if (!Config->Threads || !sys::fs::exists(Config->OutputFile) ||
+ !sys::fs::is_regular_file(Config->OutputFile))
return;
// First, rename Path to avoid race condition. We cannot remove
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D34917.104956.patch
Type: text/x-patch
Size: 579 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170630/ca6e66ed/attachment.bin>
More information about the llvm-commits
mailing list