[compiler-rt] r269981 - [sanitizer] Move *fstat to the common interceptors
Benjamin Kramer via llvm-commits
llvm-commits at lists.llvm.org
Thu May 19 09:10:11 PDT 2016
I had to revert this in r270076 as it breaks check-msan on linux. It
looks like the interceptors that used to be #ifdef FREEBSD are now
defined unconditionally?
On Wed, May 18, 2016 at 10:49 PM, Mike Aizatsky via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: aizatsky
> Date: Wed May 18 15:49:49 2016
> New Revision: 269981
>
> URL: http://llvm.org/viewvc/llvm-project?rev=269981&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.
>
> Resubmit of http://reviews.llvm.org/D20318 with ios build fixes.
>
> Reviewers: eugenis, vitalybuka, aizatsky
>
> Subscribers: zaks.anna, kcc, bruening, kubabrecka, srhines, danalbert, tberghammer
>
> Differential Revision: http://reviews.llvm.org/D20350
>
> 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=269981&r1=269980&r2=269981&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/asan_interceptors.cc (original)
> +++ compiler-rt/trunk/lib/asan/asan_interceptors.cc Wed May 18 15:49:49 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=269981&r1=269980&r2=269981&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/msan/msan_interceptors.cc (original)
> +++ compiler-rt/trunk/lib/msan/msan_interceptors.cc Wed May 18 15:49:49 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=269981&r1=269980&r2=269981&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc Wed May 18 15:49:49 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=269981&r1=269980&r2=269981&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h Wed May 18 15:49:49 2016
> @@ -306,4 +306,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 SANITIZER_INTERCEPT___XSTAT
> +#define SANITIZER_INTERCEPT___FXSTATAT64 SI_LINUX_NOT_ANDROID
> #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=269981&r1=269980&r2=269981&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc (original)
> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc Wed May 18 15:49:49 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);
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list