[compiler-rt] r182466 - [msan] getaddrinfo & nested interceptor support.

Evgeniy Stepanov eugeni.stepanov at gmail.com
Fri May 31 03:47:52 PDT 2013


Ouch.
r182993.

On Fri, May 31, 2013 at 2:04 AM, Matt Beaumont-Gay <matthewbg at google.com> wrote:
> On Wed, May 22, 2013 at 5:50 AM, Evgeniy Stepanov
> <eugeni.stepanov at gmail.com> wrote:
>> Author: eugenis
>> Date: Wed May 22 07:50:26 2013
>> New Revision: 182466
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=182466&view=rev
>> Log:
>> [msan] getaddrinfo & nested interceptor support.
>>
>> Multiple connected changes:
>> - Ignore reads from nested interceptors.
>> - Check shadow on reads from common interceptors.
>> - getaddrinfo interceptor.
>>
>>
>> Added:
>>     compiler-rt/trunk/lib/msan/lit_tests/getaddrinfo-positive.cc   (with props)
>>     compiler-rt/trunk/lib/msan/lit_tests/getaddrinfo.cc   (with props)
>> Modified:
>>     compiler-rt/trunk/lib/msan/msan_interceptors.cc
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h
>>     compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc
>>     compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h
>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc?rev=182466&r1=182465&r2=182466&view=diff
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc Wed May 22 07:50:26 2013
>> @@ -29,9 +29,11 @@
>>  #include <sys/utsname.h>
>>  #include <sys/types.h>
>>  #include <sys/stat.h>
>> +#include <sys/socket.h>
>>  #include <sys/time.h>
>>  #include <sys/resource.h>
>>  #include <sys/socket.h>
>> +#include <netdb.h>
>>  #include <time.h>
>>
>>  #if !SANITIZER_ANDROID
>> @@ -56,6 +58,7 @@ namespace __sanitizer {
>>    unsigned struct_sigaction_sz = sizeof(struct sigaction);
>>    unsigned struct_itimerval_sz = sizeof(struct itimerval);
>>    unsigned pthread_t_sz = sizeof(pthread_t);
>> +  unsigned struct_sockaddr_sz = sizeof(struct sockaddr);
>>
>>  #if !SANITIZER_ANDROID
>>    unsigned ucontext_t_sz = sizeof(ucontext_t);
>> @@ -133,4 +136,12 @@ COMPILER_CHECK(offsetof(struct __sanitiz
>>                 offsetof(struct dl_phdr_info, dlpi_phnum));
>>  #endif
>>
>> +COMPILER_CHECK(sizeof(struct __sanitizer_addrinfo) == sizeof(struct addrinfo));
>> +COMPILER_CHECK(offsetof(struct __sanitizer_addrinfo, ai_addr) ==
>> +               offsetof(struct addrinfo, ai_addr));
>> +COMPILER_CHECK(offsetof(struct __sanitizer_addrinfo, ai_canonname) ==
>> +               offsetof(struct addrinfo, ai_canonname));
>> +COMPILER_CHECK(offsetof(struct __sanitizer_addrinfo, ai_next) ==
>> +               offsetof(struct addrinfo, ai_next));
>
> There's a missing check here: sizeof(__sanitizer_addrinfo::ai_addrlen)
> == sizeof(addrinfo::ai_addrlen). When the real ai_addrlen is only 32
> bits and ASan's is 64 bits, after r182852, we read the (uninitialized)
> padding bits as part of the size.



More information about the llvm-commits mailing list