diff options
-rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc | 11 | ||||
-rw-r--r-- | compiler-rt/test/msan/Linux/sendmsg.cc | 4 |
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) |