[msan] Fix srcaddr handling in recvfrom interceptor.
authorEvgenii Stepanov <eugenis@google.com>
Fri, 13 Mar 2020 00:26:56 +0000 (17:26 -0700)
committerEvgenii Stepanov <eugenis@google.com>
Fri, 13 Mar 2020 00:29:10 +0000 (17:29 -0700)
Recvfrom may receive a 0 byte packet with a non-empty source address.

compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc

index 454a081..6daed4a 100644 (file)
@@ -6433,12 +6433,11 @@ INTERCEPTOR(SSIZE_T, recvfrom, int fd, void *buf, SIZE_T len, int flags,
   if (srcaddr) srcaddr_sz = *addrlen;
   (void)srcaddr_sz;  // prevent "set but not used" warning
   SSIZE_T res = REAL(recvfrom)(fd, buf, len, flags, srcaddr, addrlen);
-  if (res > 0) {
+  if (res > 0)
     COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buf, Min((SIZE_T)res, len));
-    if (srcaddr)
-      COMMON_INTERCEPTOR_INITIALIZE_RANGE(srcaddr,
-                                          Min((SIZE_T)*addrlen, srcaddr_sz));
-  }
+  if (res >= 0 && srcaddr)
+    COMMON_INTERCEPTOR_INITIALIZE_RANGE(srcaddr,
+                                        Min((SIZE_T)*addrlen, srcaddr_sz));
   return res;
 }
 #define INIT_RECV_RECVFROM          \