[compiler-rt] r269856 - [sanitizer] Move *fstat to the common interceptors
Mike Aizatsky via llvm-commits
llvm-commits at lists.llvm.org
Tue May 17 15:26:50 PDT 2016
Author: aizatsky
Date: Tue May 17 17:26:50 2016
New Revision: 269856
URL: http://llvm.org/viewvc/llvm-project?rev=269856&view=rev
Log:
[sanitizer] Move *fstat to the common interceptors
Summary:
Adds *fstat to the common interceptors.
Removes the now-duplicate fstat interceptor from msan/tsan
This adds fstat to asan/esan, which previously did not intercept it.
Reviewers: eugenis, vitalybuka, aizatsky
Subscribers: tberghammer, danalbert, srhines, kubabrecka, bruening, kcc
Differential Revision: http://reviews.llvm.org/D20318
Modified:
compiler-rt/trunk/lib/asan/asan_interceptors.cc
compiler-rt/trunk/lib/msan/msan_interceptors.cc
compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc
compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h
compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc
Modified: compiler-rt/trunk/lib/asan/asan_interceptors.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_interceptors.cc?rev=269856&r1=269855&r2=269856&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_interceptors.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_interceptors.cc Tue May 17 17:26:50 2016
@@ -168,6 +168,9 @@ DECLARE_REAL_AND_INTERCEPTOR(void, free,
#define COMMON_INTERCEPTOR_FD_RELEASE(ctx, fd) \
do { \
} while (false)
+#define COMMON_INTERCEPTOR_FD_ACCESS(ctx, fd) \
+ do { \
+ } while (false)
#define COMMON_INTERCEPTOR_FD_SOCKET_ACCEPT(ctx, fd, newfd) \
do { \
} while (false)
Modified: compiler-rt/trunk/lib/msan/msan_interceptors.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_interceptors.cc?rev=269856&r1=269855&r2=269856&view=diff
==============================================================================
--- compiler-rt/trunk/lib/msan/msan_interceptors.cc (original)
+++ compiler-rt/trunk/lib/msan/msan_interceptors.cc Tue May 17 17:26:50 2016
@@ -684,64 +684,6 @@ INTERCEPTOR(int, putenv, char *string) {
return res;
}
-#if !SANITIZER_FREEBSD
-INTERCEPTOR(int, __fxstat, int magic, int fd, void *buf) {
- ENSURE_MSAN_INITED();
- int res = REAL(__fxstat)(magic, fd, buf);
- if (!res)
- __msan_unpoison(buf, __sanitizer::struct_stat_sz);
- return res;
-}
-#define MSAN_MAYBE_INTERCEPT___FXSTAT INTERCEPT_FUNCTION(__fxstat)
-#else
-#define MSAN_MAYBE_INTERCEPT___FXSTAT
-#endif
-
-#if !SANITIZER_FREEBSD
-INTERCEPTOR(int, __fxstat64, int magic, int fd, void *buf) {
- ENSURE_MSAN_INITED();
- int res = REAL(__fxstat64)(magic, fd, buf);
- if (!res)
- __msan_unpoison(buf, __sanitizer::struct_stat64_sz);
- return res;
-}
-#define MSAN_MAYBE_INTERCEPT___FXSTAT64 INTERCEPT_FUNCTION(__fxstat64)
-#else
-#define MSAN_MAYBE_INTERCEPT___FXSTAT64
-#endif
-
-#if SANITIZER_FREEBSD
-INTERCEPTOR(int, fstatat, int fd, char *pathname, void *buf, int flags) {
- ENSURE_MSAN_INITED();
- int res = REAL(fstatat)(fd, pathname, buf, flags);
- if (!res) __msan_unpoison(buf, __sanitizer::struct_stat_sz);
- return res;
-}
-# define MSAN_INTERCEPT_FSTATAT INTERCEPT_FUNCTION(fstatat)
-#else
-INTERCEPTOR(int, __fxstatat, int magic, int fd, char *pathname, void *buf,
- int flags) {
- ENSURE_MSAN_INITED();
- int res = REAL(__fxstatat)(magic, fd, pathname, buf, flags);
- if (!res) __msan_unpoison(buf, __sanitizer::struct_stat_sz);
- return res;
-}
-# define MSAN_INTERCEPT_FSTATAT INTERCEPT_FUNCTION(__fxstatat)
-#endif
-
-#if !SANITIZER_FREEBSD
-INTERCEPTOR(int, __fxstatat64, int magic, int fd, char *pathname, void *buf,
- int flags) {
- ENSURE_MSAN_INITED();
- int res = REAL(__fxstatat64)(magic, fd, pathname, buf, flags);
- if (!res) __msan_unpoison(buf, __sanitizer::struct_stat64_sz);
- return res;
-}
-#define MSAN_MAYBE_INTERCEPT___FXSTATAT64 INTERCEPT_FUNCTION(__fxstatat64)
-#else
-#define MSAN_MAYBE_INTERCEPT___FXSTATAT64
-#endif
-
INTERCEPTOR(int, pipe, int pipefd[2]) {
if (msan_init_is_running)
return REAL(pipe)(pipefd);
@@ -1303,6 +1245,9 @@ int OnExit() {
#define COMMON_INTERCEPTOR_FD_RELEASE(ctx, fd) \
do { \
} while (false)
+#define COMMON_INTERCEPTOR_FD_ACCESS(ctx, fd) \
+ do { \
+ } while (false)
#define COMMON_INTERCEPTOR_FD_SOCKET_ACCEPT(ctx, fd, newfd) \
do { \
} while (false)
@@ -1549,10 +1494,6 @@ void InitializeInterceptors() {
INTERCEPT_FUNCTION(putenv);
INTERCEPT_FUNCTION(gettimeofday);
INTERCEPT_FUNCTION(fcvt);
- MSAN_MAYBE_INTERCEPT___FXSTAT;
- MSAN_INTERCEPT_FSTATAT;
- MSAN_MAYBE_INTERCEPT___FXSTAT64;
- MSAN_MAYBE_INTERCEPT___FXSTATAT64;
INTERCEPT_FUNCTION(pipe);
INTERCEPT_FUNCTION(pipe2);
INTERCEPT_FUNCTION(socketpair);
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc?rev=269856&r1=269855&r2=269856&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc Tue May 17 17:26:50 2016
@@ -5609,7 +5609,106 @@ INTERCEPTOR(int, __lxstat64, int version
#define INIT___LXSTAT64
#endif
-// FIXME: add other *stat interceptor
+#if SANITIZER_INTERCEPT_FSTAT
+INTERCEPTOR(int, fstat, int fd, void *buf) {
+ void *ctx;
+ COMMON_INTERCEPTOR_ENTER(ctx, fstat, fd, buf);
+ if (common_flags()->intercept_stat && fd > 0)
+ COMMON_INTERCEPTOR_FD_ACCESS(ctx, fd);
+ int res = REAL(fstat)(fd, buf);
+ if (!res)
+ COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buf, __sanitizer::struct_stat_sz);
+ return res;
+}
+#define INIT_FSTAT COMMON_INTERCEPT_FUNCTION(fstat)
+#else
+#define INIT_FSTAT
+#endif
+
+#if SANITIZER_INTERCEPT___FXSTAT
+INTERCEPTOR(int, __fxstat, int version, int fd, void *buf) {
+ void *ctx;
+ COMMON_INTERCEPTOR_ENTER(ctx, __fxstat, version, fd, buf);
+ if (common_flags()->intercept_stat && fd > 0)
+ COMMON_INTERCEPTOR_FD_ACCESS(ctx, fd);
+ int res = REAL(__fxstat)(version, fd, buf);
+ if (!res)
+ COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buf, __sanitizer::struct_stat_sz);
+ return res;
+}
+#define INIT___FXSTAT COMMON_INTERCEPT_FUNCTION(__fxstat)
+#else
+#define INIT___FXSTAT
+#endif
+
+#if SANITIZER_INTERCEPT___FXSTAT64
+INTERCEPTOR(int, __fxstat64, int version, int fd, void *buf) {
+ void *ctx;
+ COMMON_INTERCEPTOR_ENTER(ctx, __fxstat64, version, fd, buf);
+ if (common_flags()->intercept_stat && fd > 0)
+ COMMON_INTERCEPTOR_FD_ACCESS(ctx, fd);
+ int res = REAL(__fxstat64)(version, fd, buf);
+ if (!res)
+ COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buf, __sanitizer::struct_stat64_sz);
+ return res;
+}
+#define INIT___FXSTAT64 COMMON_INTERCEPT_FUNCTION(__fxstat64)
+#else
+#define INIT___FXSTAT64
+#endif
+
+#if SANITIZER_INTERCEPT_FSTATAT
+INTERCEPTOR(int, fstatat, int fd, char *pathname, void *buf, int flags) {
+ void *ctx;
+ COMMON_INTERCEPTOR_ENTER(ctx, fstatat, fd, pathname, buf, flags);
+ if (common_flags()->intercept_stat)
+ COMMON_INTERCEPTOR_READ_STRING(ctx, pathname, 0);
+ int res = REAL(fstatat)(fd, pathname, buf, flags);
+ if (!res)
+ COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buf, __sanitizer::struct_stat_sz);
+ return res;
+}
+#define INIT_FSTATAT COMMON_INTERCEPT_FUNCTION(fstatat);
+#else
+#define INIT_FSTATAT
+#endif
+
+#if SANITIZER_INTERCEPT___FXSTATAT
+INTERCEPTOR(int, __fxstatat, int version, int fd, char *pathname, void *buf,
+ int flags) {
+ void *ctx;
+ COMMON_INTERCEPTOR_ENTER(ctx, __fxstatat, version, fd, pathname, buf, flags);
+ if (common_flags()->intercept_stat)
+ COMMON_INTERCEPTOR_READ_STRING(ctx, pathname, 0);
+ int res = REAL(__fxstatat)(fd, version, pathname, buf, flags);
+ if (!res) {
+ COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buf, __sanitizer::struct_stat_sz);
+ }
+ return res;
+}
+#define INIT___FXSTATAT COMMON_INTERCEPT_FUNCTION(__fxstatat);
+#else
+#define INIT___FXSTATAT
+#endif
+
+#if SANITIZER_INTERCEPT___FXSTATAT64
+INTERCEPTOR(int, __fxstatat64, int version, int fd, char *pathname, void *buf,
+ int flags) {
+ void *ctx;
+ COMMON_INTERCEPTOR_ENTER(ctx, __fxstatat64, version, fd, pathname, buf,
+ flags);
+ if (common_flags()->intercept_stat)
+ COMMON_INTERCEPTOR_READ_STRING(ctx, pathname, 0);
+ int res = REAL(__fxstatat64)(fd, version, pathname, buf, flags);
+ if (!res) {
+ COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buf, __sanitizer::struct_stat64_sz);
+ }
+ return res;
+}
+#define INIT___FXSTATAT64 COMMON_INTERCEPT_FUNCTION(__fxstatat64);
+#else
+#define INIT___FXSTATAT64
+#endif
static void InitializeCommonInterceptors() {
static u64 metadata_mem[sizeof(MetadataHashMap) / sizeof(u64) + 1];
@@ -5801,5 +5900,10 @@ static void InitializeCommonInterceptors
INIT___XSTAT64;
INIT___LXSTAT;
INIT___LXSTAT64;
- // FIXME: add other *stat interceptors.
+ INIT_FSTAT;
+ INIT___FXSTAT;
+ INIT___FXSTAT64;
+ INIT_FSTATAT;
+ INIT___FXSTATAT;
+ INIT___FXSTATAT64;
}
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h?rev=269856&r1=269855&r2=269856&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h Tue May 17 17:26:50 2016
@@ -302,4 +302,10 @@
#define SANITIZER_INTERCEPT___XSTAT64 SI_LINUX_NOT_ANDROID
#define SANITIZER_INTERCEPT___LXSTAT SANITIZER_INTERCEPT___XSTAT
#define SANITIZER_INTERCEPT___LXSTAT64 SI_LINUX_NOT_ANDROID
+#define SANITIZER_INTERCEPT_FSTAT SANITIZER_INTERCEPT_STAT
+#define SANITIZER_INTERCEPT___FXSTAT SANITIZER_INTERCEPT___XSTAT
+#define SANITIZER_INTERCEPT___FXSTAT64 SI_LINUX_NOT_ANDROID
+#define SANITIZER_INTERCEPT_FSTATAT SI_FREEBSD
+#define SANITIZER_INTERCEPT___FXSTATAT !SI_FREEBSD && SI_NOT_WINDOWS
+#define SANITIZER_INTERCEPT___FXSTATAT64 !SI_FREEBSD && SI_NOT_WINDOWS
#endif // #ifndef SANITIZER_PLATFORM_INTERCEPTORS_H
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc?rev=269856&r1=269855&r2=269856&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc Tue May 17 17:26:50 2016
@@ -1358,56 +1358,6 @@ TSAN_INTERCEPTOR(int, pthread_once, void
return 0;
}
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
-TSAN_INTERCEPTOR(int, __fxstat, int version, int fd, void *buf) {
- SCOPED_TSAN_INTERCEPTOR(__fxstat, version, fd, buf);
- if (fd > 0)
- FdAccess(thr, pc, fd);
- return REAL(__fxstat)(version, fd, buf);
-}
-#define TSAN_MAYBE_INTERCEPT___FXSTAT TSAN_INTERCEPT(__fxstat)
-#else
-#define TSAN_MAYBE_INTERCEPT___FXSTAT
-#endif
-
-TSAN_INTERCEPTOR(int, fstat, int fd, void *buf) {
-#if SANITIZER_FREEBSD || SANITIZER_MAC || SANITIZER_ANDROID
- SCOPED_TSAN_INTERCEPTOR(fstat, fd, buf);
- if (fd > 0)
- FdAccess(thr, pc, fd);
- return REAL(fstat)(fd, buf);
-#else
- SCOPED_TSAN_INTERCEPTOR(__fxstat, 0, fd, buf);
- if (fd > 0)
- FdAccess(thr, pc, fd);
- return REAL(__fxstat)(0, fd, buf);
-#endif
-}
-
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
-TSAN_INTERCEPTOR(int, __fxstat64, int version, int fd, void *buf) {
- SCOPED_TSAN_INTERCEPTOR(__fxstat64, version, fd, buf);
- if (fd > 0)
- FdAccess(thr, pc, fd);
- return REAL(__fxstat64)(version, fd, buf);
-}
-#define TSAN_MAYBE_INTERCEPT___FXSTAT64 TSAN_INTERCEPT(__fxstat64)
-#else
-#define TSAN_MAYBE_INTERCEPT___FXSTAT64
-#endif
-
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
-TSAN_INTERCEPTOR(int, fstat64, int fd, void *buf) {
- SCOPED_TSAN_INTERCEPTOR(__fxstat64, 0, fd, buf);
- if (fd > 0)
- FdAccess(thr, pc, fd);
- return REAL(__fxstat64)(0, fd, buf);
-}
-#define TSAN_MAYBE_INTERCEPT_FSTAT64 TSAN_INTERCEPT(fstat64)
-#else
-#define TSAN_MAYBE_INTERCEPT_FSTAT64
-#endif
-
TSAN_INTERCEPTOR(int, open, const char *name, int flags, int mode) {
SCOPED_TSAN_INTERCEPTOR(open, name, flags, mode);
READ_STRING(thr, pc, name, 0);
@@ -2536,10 +2486,6 @@ void InitializeInterceptors() {
TSAN_INTERCEPT(pthread_once);
- TSAN_INTERCEPT(fstat);
- TSAN_MAYBE_INTERCEPT___FXSTAT;
- TSAN_MAYBE_INTERCEPT_FSTAT64;
- TSAN_MAYBE_INTERCEPT___FXSTAT64;
TSAN_INTERCEPT(open);
TSAN_MAYBE_INTERCEPT_OPEN64;
TSAN_INTERCEPT(creat);
More information about the llvm-commits
mailing list