[compiler-rt] r269981 - [sanitizer] Move *fstat to the common interceptors

Mike Aizatsky via llvm-commits llvm-commits at lists.llvm.org
Thu May 19 10:26:06 PDT 2016


[+Qin, cl author]

On Thu, May 19, 2016 at 09:10 Benjamin Kramer <benny.kra at gmail.com> wrote:

> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160519/577c66b9/attachment.html>


More information about the llvm-commits mailing list