summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2016-06-20 17:57:51 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2016-06-20 17:57:51 +0000
commit44bd90e3888c279ffe14e2f5c75bcc664423eda5 (patch)
treec19e787779ae1d3cf8de043781a887738fdd75d7 /lib
parent25d3c2b672490f04f8b62698a94c3cd45f5f43c8 (diff)
Hide send/sendto/sendmsg interptors under a flag.
A runtime flag to enable checking in send* interceptors. Checking is enabled by default. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@273174 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/sanitizer_common/sanitizer_common_interceptors.inc12
-rw-r--r--lib/sanitizer_common/sanitizer_flags.inc3
2 files changed, 11 insertions, 4 deletions
diff --git a/lib/sanitizer_common/sanitizer_common_interceptors.inc b/lib/sanitizer_common/sanitizer_common_interceptors.inc
index e139598a0..6962659fd 100644
--- a/lib/sanitizer_common/sanitizer_common_interceptors.inc
+++ b/lib/sanitizer_common/sanitizer_common_interceptors.inc
@@ -2521,7 +2521,8 @@ INTERCEPTOR(SSIZE_T, sendmsg, int fd, struct __sanitizer_msghdr *msg,
COMMON_INTERCEPTOR_FD_RELEASE(ctx, fd);
}
SSIZE_T res = REAL(sendmsg)(fd, msg, flags);
- if (res >= 0 && msg) read_msghdr(ctx, msg, res);
+ if (common_flags()->intercept_send && res >= 0 && msg)
+ read_msghdr(ctx, msg, res);
return res;
}
#define INIT_SENDMSG COMMON_INTERCEPT_FUNCTION(sendmsg);
@@ -5623,7 +5624,8 @@ INTERCEPTOR(SSIZE_T, send, int fd, void *buf, SIZE_T len, int flags) {
COMMON_INTERCEPTOR_FD_RELEASE(ctx, fd);
}
SSIZE_T res = REAL(send)(fd, buf, len, flags);
- if (res > 0) COMMON_INTERCEPTOR_READ_RANGE(ctx, buf, Min((SIZE_T)res, len));
+ if (common_flags()->intercept_send && res > 0)
+ COMMON_INTERCEPTOR_READ_RANGE(ctx, buf, Min((SIZE_T)res, len));
return res;
}
@@ -5635,9 +5637,11 @@ INTERCEPTOR(SSIZE_T, sendto, int fd, void *buf, SIZE_T len, int flags,
COMMON_INTERCEPTOR_FD_ACCESS(ctx, fd);
COMMON_INTERCEPTOR_FD_RELEASE(ctx, fd);
}
- if (srcaddr && addrlen) COMMON_INTERCEPTOR_READ_RANGE(ctx, srcaddr, addrlen);
+ if (common_flags()->intercept_send && srcaddr && addrlen)
+ COMMON_INTERCEPTOR_READ_RANGE(ctx, srcaddr, addrlen);
SSIZE_T res = REAL(sendto)(fd, buf, len, flags, srcaddr, addrlen);
- if (res > 0) COMMON_INTERCEPTOR_READ_RANGE(ctx, buf, Min((SIZE_T)res, len));
+ if (common_flags()->intercept_send && res > 0)
+ COMMON_INTERCEPTOR_READ_RANGE(ctx, buf, Min((SIZE_T)res, len));
return res;
}
#define INIT_SEND_SENDTO \
diff --git a/lib/sanitizer_common/sanitizer_flags.inc b/lib/sanitizer_common/sanitizer_flags.inc
index ff6acc6f4..ff03c0625 100644
--- a/lib/sanitizer_common/sanitizer_flags.inc
+++ b/lib/sanitizer_common/sanitizer_flags.inc
@@ -205,6 +205,9 @@ COMMON_FLAG(bool, intercept_intrin, true,
COMMON_FLAG(bool, intercept_stat, true,
"If set, uses custom wrappers for *stat functions "
"to find more errors.")
+COMMON_FLAG(bool, intercept_send, true,
+ "If set, uses custom wrappers for send* functions "
+ "to find more errors.")
COMMON_FLAG(bool, decorate_proc_maps, false, "If set, decorate sanitizer "
"mappings in /proc/self/maps with "
"user-readable names")