summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc11
-rw-r--r--compiler-rt/test/msan/Linux/sendmsg.cc4
2 files changed, 13 insertions, 2 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc
index 6962659fd3f..ae78da2e74b 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc
@@ -2501,7 +2501,16 @@ INTERCEPTOR(SSIZE_T, recvmsg, int fd, struct __sanitizer_msghdr *msg,
#if SANITIZER_INTERCEPT_SENDMSG
static void read_msghdr(void *ctx, struct __sanitizer_msghdr *msg,
SSIZE_T maxlen) {
- COMMON_INTERCEPTOR_READ_RANGE(ctx, msg, sizeof(*msg));
+#define R(f) \
+ COMMON_INTERCEPTOR_READ_RANGE(ctx, &msg->msg_##f, sizeof(msg->msg_##f))
+ R(name);
+ R(namelen);
+ R(iov);
+ R(iovlen);
+ R(control);
+ R(controllen);
+ R(flags);
+#undef R
if (msg->msg_name && msg->msg_namelen)
COMMON_INTERCEPTOR_READ_RANGE(ctx, msg->msg_name, msg->msg_namelen);
if (msg->msg_iov && msg->msg_iovlen)
diff --git a/compiler-rt/test/msan/Linux/sendmsg.cc b/compiler-rt/test/msan/Linux/sendmsg.cc
index aedb9709840..2f5600729f0 100644
--- a/compiler-rt/test/msan/Linux/sendmsg.cc
+++ b/compiler-rt/test/msan/Linux/sendmsg.cc
@@ -59,11 +59,13 @@ int main() {
#if defined(SENDMSG)
struct iovec iov[2] = {{buf, 5}, {buf + 5, 5}};
struct msghdr msg;
- memset(&msg, 0, sizeof(msg));
msg.msg_name = &serveraddr;
msg.msg_namelen = addrlen;
msg.msg_iov = iov;
msg.msg_iovlen = 2;
+ msg.msg_control = 0;
+ msg.msg_controllen = 0;
+ msg.msg_flags = 0;
#endif
#if defined(SEND)
OpenPOWER on IntegriCloud