[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