Revert "[sanitizer] Support running without fd 0,1,2."
authorIlya Biryukov <ibiryukov@google.com>
Thu, 20 Dec 2018 12:50:03 +0000 (12:50 +0000)
committerIlya Biryukov <ibiryukov@google.com>
Thu, 20 Dec 2018 12:50:03 +0000 (12:50 +0000)
This reverts commit r349699.
Reason: the commit breaks compilation of sanitizer_rtems.cc when
building for RTEMS.

llvm-svn: 349745

compiler-rt/lib/sanitizer_common/sanitizer_linux.cc
compiler-rt/lib/sanitizer_common/sanitizer_mac.cc
compiler-rt/lib/sanitizer_common/sanitizer_netbsd.cc
compiler-rt/lib/sanitizer_common/sanitizer_posix.cc
compiler-rt/lib/sanitizer_common/sanitizer_posix.h
compiler-rt/lib/sanitizer_common/sanitizer_rtems.cc
compiler-rt/lib/sanitizer_common/sanitizer_solaris.cc
compiler-rt/test/asan/TestCases/Posix/no-fd.cc [deleted file]

index ecc5bac..6cfb615 100644 (file)
@@ -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);
index e738ff1..95c47ba 100644 (file)
@@ -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);
 }
index 80d0855..cdf552c 100644 (file)
@@ -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);
index c92986c..116270f 100644 (file)
@@ -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
index 37f27d5..2ebfae8 100644 (file)
@@ -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
index ebf05db..678906a 100644 (file)
@@ -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) {
index cc0201c..9d0c3d9 100644 (file)
@@ -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 (file)
index 1c94545..0000000
+++ /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();
-  }
-}