[compiler-rt] r182844 - [sanitizer] Intercept getpeername.

Evgeniy Stepanov eugeni.stepanov at gmail.com
Wed May 29 04:49:25 PDT 2013


Author: eugenis
Date: Wed May 29 06:49:25 2013
New Revision: 182844

URL: http://llvm.org/viewvc/llvm-project?rev=182844&view=rev
Log:
[sanitizer] Intercept getpeername.

Modified:
    compiler-rt/trunk/lib/msan/tests/msan_test.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_stat.cc
    compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h

Modified: compiler-rt/trunk/lib/msan/tests/msan_test.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/tests/msan_test.cc?rev=182844&r1=182843&r2=182844&view=diff
==============================================================================
--- compiler-rt/trunk/lib/msan/tests/msan_test.cc (original)
+++ compiler-rt/trunk/lib/msan/tests/msan_test.cc Wed May 29 06:49:25 2013
@@ -669,7 +669,7 @@ TEST(MemorySanitizer, accept) {
   res = getsockname(listen_socket, (struct sockaddr *)&sai, &sz);
   ASSERT_EQ(0, res);
   ASSERT_EQ(sizeof(sai), sz);
-  
+
   int connect_socket = socket(AF_INET, SOCK_STREAM, 0);
   ASSERT_LT(0, connect_socket);
   res = fcntl(connect_socket, F_SETFL, O_NONBLOCK);
@@ -679,11 +679,17 @@ TEST(MemorySanitizer, accept) {
   ASSERT_EQ(EINPROGRESS, errno);
 
   __msan_poison(&sai, sizeof(sai));
-  int new_sock = accept(listen_socket,(struct sockaddr *)&sai, &sz);
+  int new_sock = accept(listen_socket, (struct sockaddr *)&sai, &sz);
   ASSERT_LT(0, new_sock);
   ASSERT_EQ(sizeof(sai), sz);
   EXPECT_NOT_POISONED(sai);
 
+  __msan_poison(&sai, sizeof(sai));
+  res = getpeername(new_sock, (struct sockaddr *)&sai, &sz);
+  ASSERT_EQ(0, res);
+  ASSERT_EQ(sizeof(sai), sz);
+  EXPECT_NOT_POISONED(sai);
+
   close(new_sock);
   close(connect_socket);
   close(listen_socket);

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=182844&r1=182843&r2=182844&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 29 06:49:25 2013
@@ -1075,6 +1075,22 @@ INTERCEPTOR(SSIZE_T, recvmsg, int fd, st
 #define INIT_RECVMSG
 #endif
 
+#if SANITIZER_INTERCEPT_GETPEERNAME
+INTERCEPTOR(int, getpeername, int sockfd, void *addr, unsigned *addrlen) {
+  void *ctx;
+  COMMON_INTERCEPTOR_ENTER(ctx, getpeername, sockfd, addr, addrlen);
+  unsigned addr_sz;
+  if (addrlen) addr_sz = *addrlen;
+  int res = REAL(getpeername)(sockfd, addr, addrlen);
+  if (!res && addr && addrlen)
+    COMMON_INTERCEPTOR_WRITE_RANGE(ctx, addr, Min(addr_sz, *addrlen));
+  return res;
+}
+#define INIT_GETPEERNAME INTERCEPT_FUNCTION(getpeername);
+#else
+#define INIT_GETPEERNAME
+#endif
+
 #define SANITIZER_COMMON_INTERCEPTORS_INIT \
   INIT_STRCASECMP;                         \
   INIT_STRNCASECMP;                        \
@@ -1106,4 +1122,5 @@ INTERCEPTOR(SSIZE_T, recvmsg, int fd, st
   INIT_ACCEPT;                             \
   INIT_ACCEPT4;                            \
   INIT_MODF;                               \
-  INIT_RECVMSG;
+  INIT_RECVMSG;                            \
+  INIT_GETPEERNAME;

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=182844&r1=182843&r2=182844&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 29 06:49:25 2013
@@ -79,5 +79,6 @@
 # define SANITIZER_INTERCEPT_ACCEPT4 SI_LINUX
 # define SANITIZER_INTERCEPT_MODF SI_NOT_WINDOWS
 # define SANITIZER_INTERCEPT_RECVMSG SI_NOT_WINDOWS
+# define SANITIZER_INTERCEPT_GETPEERNAME SI_NOT_WINDOWS
 
 #endif  // #ifndef SANITIZER_PLATFORM_INTERCEPTORS_H

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc?rev=182844&r1=182843&r2=182844&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc Wed May 29 06:49:25 2013
@@ -325,6 +325,7 @@ void StatOutput(u64 *stat) {
   name[StatInt_modf]                     = "  modf                            ";
   name[StatInt_modff]                    = "  modff                           ";
   name[StatInt_modfl]                    = "  modfl                           ";
+  name[StatInt_getpeername]              = "  getpeername                     ";
 
   name[StatAnnotation]                   = "Dynamic annotations               ";
   name[StatAnnotateHappensBefore]        = "  HappensBefore                   ";

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h?rev=182844&r1=182843&r2=182844&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h Wed May 29 06:49:25 2013
@@ -320,6 +320,7 @@ enum StatType {
   StatInt_modf,
   StatInt_modff,
   StatInt_modfl,
+  StatInt_getpeername,
 
   // Dynamic annotations.
   StatAnnotation,





More information about the llvm-commits mailing list