Commit Graph

688 Commits

Author SHA1 Message Date
Evgeniy Stepanov 40d7ed5d1e [sanitizer] Improve getaddrinfo interceptor.
llvm-svn: 182775
2013-05-28 14:34:37 +00:00
Peter Collingbourne a7887bf8be [nolibc] Add a test case for Linux/x86_64.
Differential Revision: http://llvm-reviews.chandlerc.com/D873

llvm-svn: 182770
2013-05-28 12:37:34 +00:00
Peter Collingbourne fb1a9f17e3 [nolibc] Make SymbolizerPrepareForSandboxing weak and optional.
Differential Revision: http://llvm-reviews.chandlerc.com/D872

llvm-svn: 182765
2013-05-28 11:05:05 +00:00
Peter Collingbourne 5b2669049a [nolibc] Make AddressInfo::Clear a weak function.
llvm-svn: 182743
2013-05-27 21:00:36 +00:00
Peter Collingbourne 123473d243 Use an address-of operator here to silence an MSVC warning.
llvm-svn: 182740
2013-05-27 16:02:19 +00:00
Sergey Matveev 39e8a6d87e [lsan] Begin converting LSan tests to output tests.
In this CL all old tests are removed and one LIT test is added.

llvm-svn: 182730
2013-05-27 11:41:46 +00:00
Sergey Matveev 9cda3df8bd [sanitizer] Move FindThreadByOSIdLocked from lsan to sanitizer_common.
llvm-svn: 182728
2013-05-27 10:35:51 +00:00
Alexey Samsonov 9c2bcf8c15 Improve support for compiler-rt tests in CMake build.
Now compiler-rt tests run correctly if compiler-rt is checked out into
arbitrary directory (not necessarily projects/compiler-rt).
Patch by Greg Fitzgerald!

llvm-svn: 182726
2013-05-27 09:35:24 +00:00
Alexander Potapenko 6535f510a3 [ASan] Introduce SymbolizerPrepareForSandboxing(), which is a no-op on every platform except Linux (because we don't support sandboxing anywhere else yet)
On Linux we pre-cache the value of readlink("/proc/self/exe"), so that it can be later used when the sandbox has been turned on.

llvm-svn: 182579
2013-05-23 11:53:36 +00:00
Evgeniy Stepanov 5415c9c352 [sanitizer] Fix Windows build.
llvm-svn: 182576
2013-05-23 11:41:58 +00:00
Timur Iskhodzhanov e05f9ba956 [ASan] Rename a atomic_compare_exchange_strong parameter to avoid a compiler warning
llvm-svn: 182575
2013-05-23 11:40:51 +00:00
Evgeniy Stepanov b978627cb8 [sanitizer] Intercept getsockopt.
llvm-svn: 182574
2013-05-23 11:38:08 +00:00
Evgeniy Stepanov ab25369d04 [sanitizer] Interceptors for gethostbyname and friends.
llvm-svn: 182573
2013-05-23 11:10:23 +00:00
Evgeniy Stepanov d23422f025 [sanitizer] Fix Mac build one more time.
llvm-svn: 182481
2013-05-22 15:21:04 +00:00
Evgeniy Stepanov 093e499e27 [sanitizer] Fix Android build.
llvm-svn: 182479
2013-05-22 14:26:52 +00:00
Evgeniy Stepanov 97aea34b54 [msan] Intercept getsockname.
llvm-svn: 182475
2013-05-22 13:46:22 +00:00
Evgeniy Stepanov a8ea8a03fd [sanitizer] Fix Android build.
llvm-svn: 182473
2013-05-22 13:38:02 +00:00
Evgeniy Stepanov 02c9c8c9f7 [sanitizer] Fix Mac build.
llvm-svn: 182469
2013-05-22 13:07:23 +00:00
Evgeniy Stepanov bfd2122b20 [msan] getaddrinfo & nested interceptor support.
Multiple connected changes:
- Ignore reads from nested interceptors.
- Check shadow on reads from common interceptors.
- getaddrinfo interceptor.

llvm-svn: 182466
2013-05-22 12:50:26 +00:00
Kostya Serebryany 8410a867eb [asan] workaround for asan bug 189 (swapcontext followed by throw gets OOM kill). Also, disable swapcontext_test on non-x86. Fix lint
llvm-svn: 182456
2013-05-22 08:54:30 +00:00
Alexey Samsonov 73565f7f5d [Sanitizer] Print verbose warning if symbolizer can't read /proc/self/exe for some reason
llvm-svn: 182374
2013-05-21 12:22:36 +00:00
Peter Collingbourne c787d42f40 [nolibc] Move symbolizer to RTSanitizerCommonLibc, and make it optional using a weak symbol.
llvm-svn: 182372
2013-05-21 12:08:37 +00:00
Peter Collingbourne fa8aa4105c [nolibc] Move stoptheworld to RTSanitizerCommonLibc.
llvm-svn: 182369
2013-05-21 11:38:39 +00:00
Peter Collingbourne 8575195772 [nolibc] Move libc-dependent sanitizer_posix.cc code to sanitizer_posix_libcdep.cc.
llvm-svn: 182366
2013-05-21 10:27:07 +00:00
Evgeniy Stepanov 4059d778d1 [sanitizer] Enable pthread_getschedparam interceptor on Android.
llvm-svn: 182361
2013-05-21 09:01:23 +00:00
Evgeniy Stepanov 970be35808 [sanitizer] Intercept pthread_getschedparam.
llvm-svn: 182353
2013-05-21 08:12:08 +00:00
Kostya Serebryany b1333fe831 [sanitizer] fix asan on the platforms where the page size is not a compile-time constant (or at least where EXEC_PAGESIZE may not be trustworthy), e.g. powerpc64.
llvm-svn: 182351
2013-05-21 06:15:50 +00:00
Peter Collingbourne b69b8a4a8f [nolibc] Move GetPageSize to the individual platforms.
GetPageSize wraps sysconf(_SC_PAGESIZE) on POSIX platforms, but
sysconf resides in libc.  To make this libc-independent on Linux,
move the wrapper to sanitizer_mac.cc and return the Linux-specific
constant EXEC_PAGESIZE in the sanitizer_linux.cc implementation.

llvm-svn: 182303
2013-05-20 17:05:29 +00:00
Peter Collingbourne 0c8df4e1d8 [nolibc] Move libc-dependent sanitizer_linux.cc code to sanitizer_linux_libcdep.cc.
llvm-svn: 182292
2013-05-20 15:57:44 +00:00
Peter Collingbourne d5169edc36 [nolibc] Make GetArgsAndEnv libc-independent.
__libc_stack_end is made into a weak symbol if possible.  If libc is
not linked, read args and environment from /proc.

llvm-svn: 182276
2013-05-20 14:25:32 +00:00
Alexander Potapenko a15d49cc1f [libsanitizer] Introduce INTERCEPTOR_WITH_SUFFIX which is to be used for appending the __DARWIN_ALIAS() version suffixes to function names on Darwin.
This should fix asan/lit_tests/wait.cc under ASan.

llvm-svn: 182259
2013-05-20 13:32:35 +00:00
Sergey Matveev 48c1d1acad [lsan] Tests for LeakSanitizer.
llvm-svn: 182250
2013-05-20 11:09:27 +00:00
Kostya Serebryany 3469375e4f [sanitizer] factor out ByteMap from SizeClassAllocator32 so that it can be later replaced with a more memory-efficient implementation on 64-bit.
llvm-svn: 182234
2013-05-20 07:29:21 +00:00
Richard Smith 73241096f7 Avoid rebuilding the RTSanitizerCommon objects when building clang_rt.san.
llvm-svn: 182218
2013-05-19 19:53:01 +00:00
David Blaikie 97c3018aac Fix the UBSan CMake build broken in r182118
llvm-svn: 182177
2013-05-17 23:57:24 +00:00
Peter Collingbourne ffaf2eac4d [nolibc] Move all platforms to internal_getpid.
Before, we had an unused internal_getpid function for Linux, and a
platform-independent GetPid function.  To make the naming conventions
consistent for syscall-like functions, the GetPid syscall wrapper
in sanitizer_posix.cc is moved to sanitizer_mac.cc, and GetPid is
renamed to internal_getpid, bringing the Linux variant into use.

llvm-svn: 182132
2013-05-17 16:56:53 +00:00
Peter Collingbourne 6d4a7d3723 [nolibc] Begin moving sanitizer_common's libc-dependent code to a separate library
Introduce a new object library, RTSanitizerCommonLibc, which will contain
the subset of sanitizer_common with libc dependencies. RTSanitizerCommon
contains the remainder of sanitizer_common, and is intended to have no
libc dependencies. Begin moving code to RTSanitizerCommonLibc, starting
with sanitizer_common.cc, whose libc-dependent portion is moved to
sanitizer_common_libcdep.cc, the first member of the new library.

This split affects the CMake build only.  The makefile build continues
to produce the full sanitizer_common library.

llvm-svn: 182118
2013-05-17 16:17:19 +00:00
Evgeniy Stepanov bec53faad0 [sanitizer] Fix build with Android NDK r8e.
llvm-svn: 182110
2013-05-17 15:22:32 +00:00
Evgeniy Stepanov 44ff0eb4b9 [sanitizer] Fix gcc build.
llvm-svn: 182094
2013-05-17 13:30:48 +00:00
Evgeniy Stepanov ff6728f2f8 [msan] Unpoison dlpi_name in dl_iterate_phdr interceptor.
llvm-svn: 182093
2013-05-17 12:51:13 +00:00
Dmitry Vyukov 69c544d857 tsan: comment out debug output in test
llvm-svn: 182087
2013-05-17 11:54:37 +00:00
Kostya Serebryany 21cbaee6a9 [sanitizer] fix gcc build
llvm-svn: 182006
2013-05-16 13:24:31 +00:00
Kostya Serebryany aaf7275677 [asan] symbolize when possible, even if ASAN_SYMBOLIZER_PATH is not provided. On Linux this will use dl_iterate_phdr instead of /proc/self/maps, even if the symbolizer is not installed
llvm-svn: 182005
2013-05-16 13:04:29 +00:00
Sergey Matveev efb6172cb3 [sanitizer] Fix the region overflow condition in SanitizerAllocator64::PopulateFreeList().
llvm-svn: 182002
2013-05-16 12:58:34 +00:00
Kostya Serebryany 19eb46f4ca [sanitizer] fix a gcc warning
llvm-svn: 181992
2013-05-16 08:03:26 +00:00
Kostya Serebryany a551aaa944 [sanitizer] fix the GetBlockBegin overflow bug while preserving the performance optimization (use 32-bit division when possible). Improve the benchmarks that checks for performance of GetBlockBegin/GetMetaData
llvm-svn: 181989
2013-05-16 07:11:16 +00:00
Kostya Serebryany ad9971d793 [sanitizer] added a test for a bug in allocator discovered by Sergey Matveev (uint32 overflow in GetBlockBegin)
llvm-svn: 181984
2013-05-16 05:22:50 +00:00
Kostya Serebryany 2b42716213 [asan] fix powerpc build and one test; fix lint
llvm-svn: 181881
2013-05-15 12:36:29 +00:00
Sergey Matveev 2387687788 [sanitizer] Fix Android build.
llvm-svn: 181796
2013-05-14 15:22:39 +00:00
Sergey Matveev 61101ba419 [sanitizer] Fixed a bug in GetListOfModules.
llvm-svn: 181793
2013-05-14 14:48:58 +00:00
Sergey Matveev 4b603e5c50 [sanitizer] Filtering in GetListOfModules.
llvm-svn: 181791
2013-05-14 14:04:06 +00:00
Sergey Matveev af05543c86 [sanitizer] LibraryNameIs in sanitizer_linux
llvm-svn: 181787
2013-05-14 13:24:46 +00:00
Sergey Matveev 14b56186ab [sanitizer] Minor fixes in sanitizer_common tests.
llvm-svn: 181786
2013-05-14 13:19:33 +00:00
Kostya Serebryany 9d987e34f7 [tsan] fix gcc build with -Wall
llvm-svn: 181763
2013-05-14 08:26:55 +00:00
Sergey Matveev d9da20f56f [sanitizer] Generic sorting in sanitizer_common.
llvm-svn: 181698
2013-05-13 11:58:48 +00:00
Sergey Matveev 37432e815e [sanitizer] Fix StopTheWorld build on non-Android ARM.
Original patch by Abdoulaye Walsimou Gaye.

llvm-svn: 181697
2013-05-13 10:35:20 +00:00
Peter Collingbourne 53caf563a9 Try to fix Windows build too
llvm-svn: 181457
2013-05-08 18:15:01 +00:00
Peter Collingbourne 8e110ce57c Try to fix the mac buildbots
llvm-svn: 181440
2013-05-08 15:07:12 +00:00
Peter Collingbourne 6f4be19b57 [nolibc] Change internal syscall API to remove reliance on libc's errno.
This change moves to a model where the error value of a system call is
potentially contained in the return value itself rather than being
implicit in errno.  The helper function internal_iserror can be used
to extract the error value from a return value.  On platforms other
than Linux/x86_64 this still uses errno, but other platforms are free
to port their error handling to this new model.

Differential Revision: http://llvm-reviews.chandlerc.com/D756

llvm-svn: 181436
2013-05-08 14:43:49 +00:00
Sergey Matveev 0d8cc4a2d2 [sanitizer] Fix build breakage in Go TSan.
llvm-svn: 181428
2013-05-08 13:59:30 +00:00
Sergey Matveev af179b8d63 [sanitizer] Move GetStackTrace from ASan to sanitizer_common.
llvm-svn: 181424
2013-05-08 12:45:55 +00:00
Sergey Matveev 3704453368 [sanitizer] Fixed InitTlsSize for Android.
llvm-svn: 181330
2013-05-07 16:29:26 +00:00
Sergey Matveev 88d0c664ef [sanitizer] Fixed includes in sanitizer_linux.cc for Android.
llvm-svn: 181327
2013-05-07 15:38:53 +00:00
Sergey Matveev 954c6ef10f [sanitizer] Move GetThreadStackAndTls from TSan to sanitizer_common.
Move this function to sanitizer_common because LSan uses it too. Also, fix a bug
where the TLS range reported for main thread was off by the size of the thread
descriptor from libc (TSan doesn't care much, but for LSan it's critical).

llvm-svn: 181322
2013-05-07 14:41:43 +00:00
Evgeniy Stepanov 517118e6b4 [sanitizer] Sanitizer __internal_*stat interface.
With this change, __internal_*stat always expect a "struct stat *" argument.
This avoids stat/stat64 caller-side confusion (sanitizer_common tests already
made this mistake), and allows the use of __internal_fstat() as a drop-in
replacement for libc's fstat().

llvm-svn: 181311
2013-05-07 12:47:04 +00:00
Sergey Matveev 0c8ed9ce44 [asan] Common flags in ASan.
Some flags that are common to ASan/MSan/TSan/LSan have been moved to
sanitizer_common.

llvm-svn: 181193
2013-05-06 11:27:58 +00:00
Dmitry Vyukov 93b2cba03b asan: fix windows build
llvm-svn: 180788
2013-04-30 13:30:29 +00:00
Dmitry Vyukov e8fa45a02c asan/tsan: fix printf(), on the second pass it prints garbage and crashes on random pointer dereference
llvm-svn: 180784
2013-04-30 12:27:48 +00:00
Dmitry Vyukov 639ba01fc3 asna/tsan/msan: fix wait() interceptors to allow NULL arguments
llvm-svn: 180703
2013-04-29 09:04:24 +00:00
Sergey Matveev b2151b8200 Revert r180599 "[sanitizer] Clear LD_PRELOAD when forking an external symbolizer."
llvm-svn: 180602
2013-04-26 13:01:40 +00:00
Sergey Matveev 3c8fbe1013 [sanitizer] Clear LD_PRELOAD when forking an external symbolizer.
llvm-svn: 180599
2013-04-26 11:35:05 +00:00
Dmitry Vyukov beaf786151 tsan: disable getpwuid_r() and glob64() interceptors under tsan, because they cause interceptor recursion if user intercepts fopen()
llvm-svn: 180182
2013-04-24 11:06:05 +00:00
Evgeniy Stepanov 44b75efab4 [sanitizer] Intercept inet_pton and inet_ntop.
llvm-svn: 180107
2013-04-23 14:05:15 +00:00
Alexey Samsonov f36c5a8431 Revert r180082 and add a test for SetEnv function
llvm-svn: 180098
2013-04-23 12:49:12 +00:00
Evgeniy Stepanov 3076ba0a08 [sanitizer] Intercept getgrnam{_r}, getgrgid{_r}.
llvm-svn: 180091
2013-04-23 12:01:20 +00:00
Evgeniy Stepanov 0cd7cf8217 [msan] Allow clock_getres(, 0).
llvm-svn: 180090
2013-04-23 11:48:31 +00:00
Alexey Samsonov e7540e3561 [Sanitizer] Delete unused function
llvm-svn: 180082
2013-04-23 08:18:09 +00:00
Evgeniy Stepanov 1a2262e1c9 [sanitizer] Fix lint.
llvm-svn: 180012
2013-04-22 13:28:26 +00:00
Alexey Samsonov 1a6cfb46e5 [Sanitizer] Rework r176802: share code between Printf and Report and simplify it a bit
llvm-svn: 179755
2013-04-18 13:18:23 +00:00
Alexey Samsonov d1efa5ef96 [Sanitizer] Don't die in symbolizer if it can't read /proc/self/exe link
llvm-svn: 179754
2013-04-18 12:46:33 +00:00
Andy Gibbs f6edda8c30 Wrap macro invocations in braces to supress 'suggest braces around empty body in an ‘if’ statement' warning.
llvm-svn: 179597
2013-04-16 15:18:55 +00:00
Evgeniy Stepanov 9b59a39f42 [sanitizer] Implement wait4 and waitpid syscall hooks.
llvm-svn: 179592
2013-04-16 13:06:20 +00:00
Evgeniy Stepanov 9fb82357dc [sanitizer] More syscall handler placeholders.
This time it's the full list scavenged from syscalls.h
Fixed return value type.

llvm-svn: 179378
2013-04-12 14:06:40 +00:00
Timur Iskhodzhanov 664ec5d7a8 Finally drop the 'static' from INLINE and ALWAYS_INLINE
The ALWAYS_INLINE doesn't have static on POSIX anyways since r178341; the INLINE is only used in .h files, so shouldn't have been 'static' in the first place

llvm-svn: 179371
2013-04-12 09:37:20 +00:00
Evgeniy Stepanov f5523116e9 [sanitizer] Syscall hooks.
Pre- and post- hooks for linux syscalls. Not wired into anything, but exposed
through public interface.

llvm-svn: 179288
2013-04-11 14:37:04 +00:00
Alexander Potapenko 227e22de5a [ASan] Do not check the shadow of NULL argument in the time() interceptor.
Add a test for time().

llvm-svn: 179177
2013-04-10 15:13:00 +00:00
Evgeniy Stepanov 460067823b [sanitizer] Interceptors for wait*.
llvm-svn: 179096
2013-04-09 14:34:59 +00:00
Evgeniy Stepanov 69967c2835 [msan] Intercept glob() with tests.
llvm-svn: 179091
2013-04-09 11:35:13 +00:00
Alexey Samsonov 7ad129277e [Sanitizer] fix TSan tests: remove global ctor from sanitizer_common, run load_shared_lib test only in lit
llvm-svn: 179090
2013-04-09 07:46:20 +00:00
Kostya Serebryany 9d28efc1ad [asan] relax Linux/zero-base-shadow.cc to make it pass on newer Ubuntu; fix lint
llvm-svn: 179088
2013-04-09 07:08:05 +00:00
Chandler Carruth 2b3c00eec7 Revert r179012: "[msan] Intercept glob()."
This was committed without tests and contains obvious bugs. That's not
acceptable. It broke address sanitizer for most programs using glob(3).

llvm-svn: 179054
2013-04-08 20:59:44 +00:00
Alexander Potapenko 32efd25b93 [libsymbolized] If we can't find an address in the list of shared libraries, try to reload it.
Add a regression test for the case where such behavior helps TSan:
  1. race is reported in the main module
  2. new shared library is loaded
  3. race is reported in the shared library

llvm-svn: 179032
2013-04-08 17:46:34 +00:00
Evgeniy Stepanov 8cd707a1a6 [msan] Intercept glob().
llvm-svn: 179012
2013-04-08 09:03:00 +00:00
Evgeniy Stepanov e20c780aaf [tsan] Fix build.
llvm-svn: 179008
2013-04-08 08:46:25 +00:00
Kostya Serebryany e6459977b8 [sanitizer] Fix boundary condition in LargeMmapAllocator::GetBlockBegin. Patch by Sergey Matveev
llvm-svn: 179007
2013-04-08 08:43:22 +00:00
Evgeniy Stepanov 7ba7207f1d [msan] Intercept time().
llvm-svn: 179002
2013-04-08 08:25:22 +00:00
Kostya Serebryany 5b4267f7e7 [sanitizer] found a bug by code inspection: CHECK(a=b) instead of CHECK(a==b). Was puzzled why lint did not catch it. Turns out this check was disabled for asan source. fix all cases and enable the check
llvm-svn: 178872
2013-04-05 14:40:25 +00:00
Alexey Samsonov 2a4668557f [Sanitizer] enquote the module name when passing it to external symbolizer
llvm-svn: 178864
2013-04-05 11:54:23 +00:00
Alexey Samsonov 46b8665ea4 Remove InternalAlloc/InternalFree calls from StopTheWorld. Patch by Sergey Matveev.
llvm-svn: 178855
2013-04-05 07:41:21 +00:00
Alexey Samsonov 734aab4066 [Sanitizer] Use a common mutex to prevent mixing reports from different sanitizers. This fixes PR15516
llvm-svn: 178853
2013-04-05 07:30:29 +00:00