diff options
author | Ilya Biryukov <ibiryukov@google.com> | 2018-12-20 12:50:03 +0000 |
---|---|---|
committer | Ilya Biryukov <ibiryukov@google.com> | 2018-12-20 12:50:03 +0000 |
commit | ea8646ad661e1df7b8195380383d1d8b4d34a27b (patch) | |
tree | 7e5883ba452fb04b75f836747e16e38aab9e6886 | |
parent | 6bbf39b48c4afac2792ac8c152e9c1e53feecb1f (diff) | |
download | bcm5719-llvm-ea8646ad661e1df7b8195380383d1d8b4d34a27b.tar.gz bcm5719-llvm-ea8646ad661e1df7b8195380383d1d8b4d34a27b.zip |
Revert "[sanitizer] Support running without fd 0,1,2."
This reverts commit r349699.
Reason: the commit breaks compilation of sanitizer_rtems.cc when
building for RTEMS.
llvm-svn: 349745
8 files changed, 10 insertions, 76 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc index ecc5bacbf7f..6cfb6150674 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc @@ -381,10 +381,6 @@ uptr internal_filesize(fd_t fd) { return (uptr)st.st_size; } -uptr internal_dup(int oldfd) { - return internal_syscall(SYSCALL(dup), oldfd); -} - uptr internal_dup2(int oldfd, int newfd) { #if SANITIZER_USES_CANONICAL_LINUX_SYSCALLS return internal_syscall(SYSCALL(dup3), oldfd, newfd, 0); diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc b/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc index e738ff1e90c..95c47babe08 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc @@ -174,10 +174,6 @@ uptr internal_filesize(fd_t fd) { return (uptr)st.st_size; } -uptr internal_dup(int oldfd) { - return dup(oldfd); -} - uptr internal_dup2(int oldfd, int newfd) { return dup2(oldfd, newfd); } diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_netbsd.cc b/compiler-rt/lib/sanitizer_common/sanitizer_netbsd.cc index 80d0855efab..cdf552c8f24 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_netbsd.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_netbsd.cc @@ -169,11 +169,6 @@ uptr internal_filesize(fd_t fd) { return (uptr)st.st_size; } -uptr internal_dup(int oldfd) { - DEFINE__REAL(int, dup, int a); - return _REAL(dup, oldfd); -} - uptr internal_dup2(int oldfd, int newfd) { DEFINE__REAL(int, dup2, int a, int b); return _REAL(dup2, oldfd, newfd); diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_posix.cc b/compiler-rt/lib/sanitizer_common/sanitizer_posix.cc index c92986c1786..116270f8d23 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_posix.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_posix.cc @@ -166,7 +166,7 @@ fd_t OpenFile(const char *filename, FileAccessMode mode, error_t *errno_p) { fd_t res = internal_open(filename, flags, 0660); if (internal_iserror(res, errno_p)) return kInvalidFd; - return ReserveStandardFds(res); + return res; } void CloseFile(fd_t fd) { @@ -269,8 +269,13 @@ bool IsAbsolutePath(const char *path) { void ReportFile::Write(const char *buffer, uptr length) { SpinMutexLock l(mu); + static const char *kWriteError = + "ReportFile::Write() can't output requested buffer!\n"; ReopenIfNecessary(); - internal_write(fd, buffer, length); + if (length != internal_write(fd, buffer, length)) { + internal_write(fd, kWriteError, internal_strlen(kWriteError)); + Die(); + } } bool GetCodeRangeForFile(const char *module, uptr *start, uptr *end) { @@ -318,21 +323,6 @@ const char *SignalContext::Describe() const { return "UNKNOWN SIGNAL"; } -fd_t ReserveStandardFds(fd_t fd) { - CHECK_GE(fd, 0); - if (fd > 2) - return fd; - bool used[3] = {false, false, false}; - while (fd <= 2) { - used[fd] = true; - fd = internal_dup(fd); - } - for (int i = 0; i <= 2; ++i) - if (used[i]) - internal_close(i); - return fd; -} - } // namespace __sanitizer #endif // SANITIZER_POSIX diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_posix.h b/compiler-rt/lib/sanitizer_common/sanitizer_posix.h index 37f27d56707..2ebfae8ba2f 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_posix.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_posix.h @@ -49,7 +49,6 @@ uptr internal_filesize(fd_t fd); // -1 on error. uptr internal_stat(const char *path, void *buf); uptr internal_lstat(const char *path, void *buf); uptr internal_fstat(fd_t fd, void *buf); -uptr internal_dup(int oldfd); uptr internal_dup2(int oldfd, int newfd); uptr internal_readlink(const char *path, char *buf, uptr bufsize); uptr internal_unlink(const char *path); @@ -100,9 +99,6 @@ uptr internal_execve(const char *filename, char *const argv[], bool IsStateDetached(int state); -// Move the fd out of {0, 1, 2} range. -fd_t ReserveStandardFds(fd_t fd); - } // namespace __sanitizer #endif // SANITIZER_POSIX_H diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_rtems.cc b/compiler-rt/lib/sanitizer_common/sanitizer_rtems.cc index ebf05db2573..678906a187a 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_rtems.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_rtems.cc @@ -200,7 +200,7 @@ fd_t OpenFile(const char *filename, FileAccessMode mode, error_t *errno_p) { fd_t res = open(filename, flags, 0660); if (internal_iserror(res, errno_p)) return kInvalidFd; - return ReserveStandardFds(res); + return res; } void CloseFile(fd_t fd) { diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_solaris.cc b/compiler-rt/lib/sanitizer_common/sanitizer_solaris.cc index cc0201c7a37..9d0c3d93d44 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_solaris.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_solaris.cc @@ -88,8 +88,8 @@ uptr internal_open(const char *filename, int flags, u32 mode) { } uptr OpenFile(const char *filename, bool write) { - return ReserveStandardFds( - internal_open(filename, write ? O_WRONLY | O_CREAT : O_RDONLY, 0660)); + return internal_open(filename, + write ? O_WRONLY | O_CREAT : O_RDONLY, 0660); } DECLARE__REAL_AND_INTERNAL(uptr, read, fd_t fd, void *buf, uptr count) { diff --git a/compiler-rt/test/asan/TestCases/Posix/no-fd.cc b/compiler-rt/test/asan/TestCases/Posix/no-fd.cc deleted file mode 100644 index 1c94545c7b3..00000000000 --- a/compiler-rt/test/asan/TestCases/Posix/no-fd.cc +++ /dev/null @@ -1,39 +0,0 @@ -// RUN: %clangxx_asan -O0 %s -o %t -// RUN: %run %t 2>&1 | FileCheck %s -// RUN: %env_asan_opts=debug=1,verbosity=2 %run %t 2>&1 | FileCheck %s - -// Test ASan initialization - -#include <assert.h> -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> - -void parent(int argc, char **argv) { - fprintf(stderr, "hello\n"); - // CHECK: hello - close(0); - close(1); - dup2(2, 3); - close(2); - char *const newargv[] = {argv[0], (char *)"x", nullptr}; - execv(argv[0], newargv); - perror("execve"); - exit(1); -} - -void child() { - assert(dup(3) == 0); - assert(dup(3) == 1); - assert(dup(3) == 2); - fprintf(stderr, "world\n"); - // CHECK: world -} - -int main(int argc, char **argv) { - if (argc == 1) { - parent(argc, argv); - } else { - child(); - } -} |