Index: lib/asan/asan_interceptors.cc =================================================================== --- lib/asan/asan_interceptors.cc +++ lib/asan/asan_interceptors.cc @@ -214,6 +214,24 @@ } while (false) #include "sanitizer_common/sanitizer_common_syscalls.inc" + +INTERCEPTOR(SSIZE_T, recv, int fd, void *buf, SIZE_T len, int flags) { + ENSURE_ASAN_INITED(); + ASAN_READ_RANGE(nullptr, buf, len); + SSIZE_T res = REAL(recv)(fd, buf, len, flags); + return res; +} + +INTERCEPTOR(SSIZE_T, recvfrom, int fd, void *buf, SIZE_T len, int flags, + void *srcaddr, int *addrlen) { + ENSURE_ASAN_INITED(); + SIZE_T srcaddr_sz; + if (srcaddr) srcaddr_sz = *addrlen; + ASAN_READ_RANGE(nullptr, buf, len); + SSIZE_T res = REAL(recvfrom)(fd, buf, len, flags, srcaddr, addrlen); + return res; +} + struct ThreadStartParam { atomic_uintptr_t t; atomic_uintptr_t is_registered; @@ -828,6 +846,10 @@ ASAN_INTERCEPT_FUNC(fork); #endif + // Inrecept recv functions. + ASAN_INTERCEPT_FUNC(recv); + ASAN_INTERCEPT_FUNC(recvfrom); + InitializePlatformInterceptors(); VReport(1, "AddressSanitizer: libc interceptors initialized\n");