From 71107c138e2ac4a0365d1b48871488b8d941fb3a Mon Sep 17 00:00:00 2001 From: Mike Aizatsky Date: Tue, 3 May 2016 21:49:56 +0000 Subject: Revert "[sanitizer] Move stat/__xstat to the common interceptors" This reverts commit 268440 because it breaks the windows bot. http://lab.llvm.org:8011/builders/sanitizer-windows/builds/21425/steps/build%20compiler-rt/logs/stdio git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@268448 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/esan/esan_interceptors.cpp | 18 +++++++++++ lib/msan/msan_interceptors.cc | 21 ++++++++++++ .../sanitizer_common_interceptors.inc | 37 ---------------------- lib/sanitizer_common/sanitizer_flags.inc | 3 -- .../sanitizer_platform_interceptors.h | 8 ----- lib/tsan/rtl/tsan_interceptors.cc | 25 +++++++++++++++ 6 files changed, 64 insertions(+), 48 deletions(-) (limited to 'lib') diff --git a/lib/esan/esan_interceptors.cpp b/lib/esan/esan_interceptors.cpp index be40032f5..479fde994 100644 --- a/lib/esan/esan_interceptors.cpp +++ b/lib/esan/esan_interceptors.cpp @@ -249,6 +249,23 @@ INTERCEPTOR(char *, strncpy, char *dst, char *src, uptr n) { return REAL(strncpy)(dst, src, n); } +#if SANITIZER_FREEBSD || SANITIZER_MAC || SANITIZER_ANDROID +INTERCEPTOR(int, stat, const char *path, void *buf) { + void *ctx; + COMMON_INTERCEPTOR_ENTER(ctx, stat, path, buf); + COMMON_INTERCEPTOR_READ_STRING(ctx, path, 0); + return REAL(stat)(path, buf); +#define ESAN_INTERCEPT_STAT INTERCEPT_FUNCTION(stat) +#else +INTERCEPTOR(int, __xstat, int version, const char *path, void *buf) { + void *ctx; + COMMON_INTERCEPTOR_ENTER(ctx, __xstat, version, path, buf); + COMMON_INTERCEPTOR_READ_STRING(ctx, path, 0); + return REAL(__xstat)(version, path, buf); +} +#define ESAN_INTERCEPT_STAT INTERCEPT_FUNCTION(__xstat) +#endif + #if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_FREEBSD INTERCEPTOR(int, __xstat64, int version, const char *path, void *buf) { void *ctx; @@ -396,6 +413,7 @@ void initializeInterceptors() { INTERCEPT_FUNCTION(strcpy); // NOLINT INTERCEPT_FUNCTION(strncpy); + ESAN_INTERCEPT_STAT; ESAN_MAYBE_INTERCEPT_STAT64; ESAN_MAYBE_INTERCEPT___XSTAT64; ESAN_INTERCEPT_LSTAT; diff --git a/lib/msan/msan_interceptors.cc b/lib/msan/msan_interceptors.cc index d4ec590c5..e51fd17de 100644 --- a/lib/msan/msan_interceptors.cc +++ b/lib/msan/msan_interceptors.cc @@ -742,6 +742,26 @@ INTERCEPTOR(int, __fxstatat64, int magic, int fd, char *pathname, void *buf, #define MSAN_MAYBE_INTERCEPT___FXSTATAT64 #endif +#if SANITIZER_FREEBSD +INTERCEPTOR(int, stat, char *path, void *buf) { + ENSURE_MSAN_INITED(); + int res = REAL(stat)(path, buf); + if (!res) + __msan_unpoison(buf, __sanitizer::struct_stat_sz); + return res; +} +# define MSAN_INTERCEPT_STAT INTERCEPT_FUNCTION(stat) +#else +INTERCEPTOR(int, __xstat, int magic, char *path, void *buf) { + ENSURE_MSAN_INITED(); + int res = REAL(__xstat)(magic, path, buf); + if (!res) + __msan_unpoison(buf, __sanitizer::struct_stat_sz); + return res; +} +# define MSAN_INTERCEPT_STAT INTERCEPT_FUNCTION(__xstat) +#endif + #if !SANITIZER_FREEBSD INTERCEPTOR(int, __xstat64, int magic, char *path, void *buf) { ENSURE_MSAN_INITED(); @@ -1590,6 +1610,7 @@ void InitializeInterceptors() { INTERCEPT_FUNCTION(fcvt); MSAN_MAYBE_INTERCEPT___FXSTAT; MSAN_INTERCEPT_FSTATAT; + MSAN_INTERCEPT_STAT; MSAN_MAYBE_INTERCEPT___LXSTAT; MSAN_MAYBE_INTERCEPT___FXSTAT64; MSAN_MAYBE_INTERCEPT___FXSTATAT64; diff --git a/lib/sanitizer_common/sanitizer_common_interceptors.inc b/lib/sanitizer_common/sanitizer_common_interceptors.inc index 142424914..e2ef649a8 100644 --- a/lib/sanitizer_common/sanitizer_common_interceptors.inc +++ b/lib/sanitizer_common/sanitizer_common_interceptors.inc @@ -5529,40 +5529,6 @@ INTERCEPTOR(SSIZE_T, recvfrom, int fd, void *buf, SIZE_T len, int flags, #define INIT_RECV_RECVFROM #endif -#if SANITIZER_INTERCEPT_STAT -INTERCEPTOR(int, stat, const char *path, void *buf) { - void *ctx; - COMMON_INTERCEPTOR_ENTER(ctx, stat, path, buf); - if (common_flags()->intercept_stat) - COMMON_INTERCEPTOR_READ_STRING(ctx, path, 0); - int res = REAL(stat)(path, buf); - if (!res) - COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buf, __sanitizer::struct_stat_sz); - return res; -} -#define INIT_STAT COMMON_INTERCEPT_FUNCTION(stat) -#else -#define INIT_STAT -#endif - -#if SANITIZER_INTERCEPT___XSTAT -INTERCEPTOR(int, __xstat, int version, const char *path, void *buf) { - void *ctx; - COMMON_INTERCEPTOR_ENTER(ctx, __xstat, version, path, buf); - if (common_flags()->intercept_stat) - COMMON_INTERCEPTOR_READ_STRING(ctx, path, 0); - int res = REAL(__xstat)(version, path, buf); - if (!res) - COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buf, __sanitizer::struct_stat_sz); - return res; -} -#define INIT___XSTAT COMMON_INTERCEPT_FUNCTION(__xstat) -#else -#define INIT___XSTAT -#endif - -// FIXME: add other *stat interceptor - static void InitializeCommonInterceptors() { static u64 metadata_mem[sizeof(MetadataHashMap) / sizeof(u64) + 1]; interceptor_metadata_map = new((void *)&metadata_mem) MetadataHashMap(); @@ -5748,7 +5714,4 @@ static void InitializeCommonInterceptors() { INIT_CTERMID; INIT_CTERMID_R; INIT_RECV_RECVFROM; - INIT_STAT; - INIT___XSTAT; - // FIXME: add other *stat interceptors. } diff --git a/lib/sanitizer_common/sanitizer_flags.inc b/lib/sanitizer_common/sanitizer_flags.inc index 858a881d0..d2fbc8b6f 100644 --- a/lib/sanitizer_common/sanitizer_flags.inc +++ b/lib/sanitizer_common/sanitizer_flags.inc @@ -197,9 +197,6 @@ COMMON_FLAG(bool, strict_memcmp, true, COMMON_FLAG(bool, intercept_intrin, true, "If set, uses custom wrappers for memset/memcpy/memmove " "intrinsics to find more errors.") -COMMON_FLAG(bool, intercept_stat, true, - "If set, uses custom wrappers for *stat functions " - "to find more errors.") COMMON_FLAG(bool, decorate_proc_maps, false, "If set, decorate sanitizer " "mappings in /proc/self/maps with " "user-readable names") diff --git a/lib/sanitizer_common/sanitizer_platform_interceptors.h b/lib/sanitizer_common/sanitizer_platform_interceptors.h index 30882ad44..4c30923cc 100644 --- a/lib/sanitizer_common/sanitizer_platform_interceptors.h +++ b/lib/sanitizer_common/sanitizer_platform_interceptors.h @@ -29,12 +29,6 @@ # define SI_LINUX_NOT_ANDROID 0 #endif -#if SANITIZER_ANDROID -# define SI_ANDROID 1 -#else -# define SI_ANDROID 0 -#endif - #if SANITIZER_FREEBSD # define SI_FREEBSD 1 #else @@ -297,6 +291,4 @@ #define SANITIZER_INTERCEPTOR_HOOKS SI_LINUX #define SANITIZER_INTERCEPT_RECV_RECVFROM SI_NOT_WINDOWS -#define SANITIZER_INTERCEPT_STAT (SI_FREEBSD || SI_MAC || SI_ANDROID) -#define SANITIZER_INTERCEPT___XSTAT !SANITIZER_INTERCEPT_STAT #endif // #ifndef SANITIZER_PLATFORM_INTERCEPTORS_H diff --git a/lib/tsan/rtl/tsan_interceptors.cc b/lib/tsan/rtl/tsan_interceptors.cc index f662c4477..03657fe1c 100644 --- a/lib/tsan/rtl/tsan_interceptors.cc +++ b/lib/tsan/rtl/tsan_interceptors.cc @@ -1349,6 +1349,29 @@ TSAN_INTERCEPTOR(int, pthread_once, void *o, void (*f)()) { return 0; } +#if SANITIZER_LINUX && !SANITIZER_ANDROID +TSAN_INTERCEPTOR(int, __xstat, int version, const char *path, void *buf) { + SCOPED_TSAN_INTERCEPTOR(__xstat, version, path, buf); + READ_STRING(thr, pc, path, 0); + return REAL(__xstat)(version, path, buf); +} +#define TSAN_MAYBE_INTERCEPT___XSTAT TSAN_INTERCEPT(__xstat) +#else +#define TSAN_MAYBE_INTERCEPT___XSTAT +#endif + +TSAN_INTERCEPTOR(int, stat, const char *path, void *buf) { +#if SANITIZER_FREEBSD || SANITIZER_MAC || SANITIZER_ANDROID + SCOPED_TSAN_INTERCEPTOR(stat, path, buf); + READ_STRING(thr, pc, path, 0); + return REAL(stat)(path, buf); +#else + SCOPED_TSAN_INTERCEPTOR(__xstat, 0, path, buf); + READ_STRING(thr, pc, path, 0); + return REAL(__xstat)(0, path, buf); +#endif +} + #if SANITIZER_LINUX && !SANITIZER_ANDROID TSAN_INTERCEPTOR(int, __xstat64, int version, const char *path, void *buf) { SCOPED_TSAN_INTERCEPTOR(__xstat64, version, path, buf); @@ -2594,6 +2617,8 @@ void InitializeInterceptors() { TSAN_INTERCEPT(pthread_once); + TSAN_INTERCEPT(stat); + TSAN_MAYBE_INTERCEPT___XSTAT; TSAN_MAYBE_INTERCEPT_STAT64; TSAN_MAYBE_INTERCEPT___XSTAT64; TSAN_INTERCEPT(lstat); -- cgit v1.2.3