Commit Graph

75 Commits

Author SHA1 Message Date
Kostya Serebryany 02062becea [asan] fix Android build (mark asan_malloc_usable_size as an interface function)
llvm-svn: 183651
2013-06-10 13:28:33 +00:00
Kostya Serebryany e71982d589 [asan] fix the bug with memalign and malloc_usable_size (http://code.google.com/p/address-sanitizer/issues/detail?id=193); also fix lint
llvm-svn: 183647
2013-06-10 10:46:27 +00:00
Sergey Matveev 1c4e214c32 [lsan] Put SANITIZER_INTERFACE_ATTRIBUTE on LSan interface functions.
llvm-svn: 183429
2013-06-06 18:40:55 +00:00
Sergey Matveev ecc4f5ba8e [lsan] Implement __lsan_ignore_object().
Leak annotation similar to HeapChecker's IgnoreObject().

llvm-svn: 183412
2013-06-06 14:17:56 +00:00
Alexey Samsonov 7a75e16c27 [ASan] One more fix for realloc: check that reallocated chunk is valid before calling memcpy
llvm-svn: 183390
2013-06-06 08:25:31 +00:00
Alexey Samsonov 8f5138a23f Call __asan_free_hook() before marking the chunk quarantinned
Summary:
With this change, the user may safely call __asan_get_ownership()
from malloc/free hooks and assume it would return "true". If there is a
realloc/free race, free hook might be called twice, but I think it's acceptable,
as it's a data race and would later be reported anyway.

This change also fixes a bug when failing realloc incorrectly marked the
original memory as "quarantinned".

Reviewers: timurrrr, kcc, samsonov

Reviewed By: samsonov

CC: llvm-commits

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

llvm-svn: 183220
2013-06-04 12:19:31 +00:00
Sergey Matveev b256ac7584 [asan] Fix invalid thread registry access when checking if LSan is disabled.
llvm-svn: 183218
2013-06-04 10:39:24 +00:00
Sergey Matveev 17ee1abfa7 [lsan] Add __lsan_disable() and __lsan_enable().
Objects allocated after a call to __lsan_disable() will be treated as
live memory. Also add a ScopedDisabler.

llvm-svn: 183099
2013-06-03 11:21:34 +00:00
Sergey Matveev 69f11803ec [lsan] Use the fast version of GetBlockBegin for leak checking in LSan and ASan.
llvm-svn: 182994
2013-05-31 11:13:45 +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
Alexey Samsonov 49eb5700e2 Revert r182465 and add lsan-common library to makefile-based build
llvm-svn: 182470
2013-05-22 13:20:37 +00:00
Alexey Samsonov 155dd46e04 [ASan] Temporary remove leak checking from ASan, while we don't have makefile-based build for LSan
llvm-svn: 182465
2013-05-22 12:44:57 +00:00
Sergey Matveev 7159b2a382 [asan] LSan hooks in asan_allocator2.cc
llvm-svn: 182379
2013-05-21 13:46:41 +00:00
Timur Iskhodzhanov 67c918a424 Fix realloc'ing freed/invalid pointers
See https://code.google.com/p/address-sanitizer/issues/detail?id=187 for the details

llvm-svn: 182255
2013-05-20 13:05:58 +00:00
Sergey Matveev 6a6c5b6dee [asan] Modify ASan metadata atomically.
We need this to avoid races when ASan and LSan are used together.

llvm-svn: 182252
2013-05-20 11:25:18 +00:00
Timur Iskhodzhanov 667cae7b69 [ASan] Remove an unused ChunkBase field
Also fix wrong alignment maths and an outdated comment

llvm-svn: 182238
2013-05-20 08:20:17 +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
Timur Iskhodzhanov 836a4f3643 Replace CHECK(a == b); with CHECK_EQ(a, b); throughout asan_allocator2.cc
llvm-svn: 182198
2013-05-18 18:27:33 +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 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
Kostya Serebryany eef8bd4355 [asan] nuke the old unused allocator code
llvm-svn: 178758
2013-04-04 11:32:49 +00:00
Kostya Serebryany 13b07733b1 [asan] fill first 4K of malloc-ed memory with garbage, implement flags max_malloc_fill_size and malloc_fill_byte
llvm-svn: 178757
2013-04-04 11:17:14 +00:00
Alexey Samsonov a88c60b085 [ASan] Speed-up initialization-order checking: create and use fast versions of PoisonShadow functions, store copies of __asan_global descriptors in a vector instead of list of pointers. This gives 3x speedup on both benchmarks and real binaries with lots of globals.
llvm-svn: 178239
2013-03-28 15:42:43 +00:00
Timur Iskhodzhanov fb74020cea Revert 177745 as it was incorrect
llvm-svn: 177746
2013-03-22 18:16:57 +00:00
Timur Iskhodzhanov e117eef77f Band-aid fix for the Windows build caused by r177710. Long-term, atomic_compare_exchange_strong should be a template on Windows too...
llvm-svn: 177745
2013-03-22 18:05:28 +00:00
Alexey Samsonov a5eb3cb721 [ASan] Fix an error on invalid deallocation in ASan allocator. When ASan checks if memory freed by user was indeed previously allocated, it first does an atomic write to presumed location of chunk header. This is wrong, as if the free is invalid, we may overwrite some valuable data (like other fields of the chunk header). Fix this by using atomic_compare_exchange instead.
llvm-svn: 177710
2013-03-22 07:40:34 +00:00
Alexey Samsonov 54afba8b62 [ASan] Switch ASan to generic ThreadRegistry from sanitizer_common. Delete ASan-specific AsanThreadRegistry.
llvm-svn: 177634
2013-03-21 11:23:41 +00:00
Alexey Samsonov 920b3b9a0c [ASan] Move malloc stats collection away from AsanThreadRegistry class.
llvm-svn: 177508
2013-03-20 10:11:24 +00:00
Alexey Samsonov cf025cb2e6 [ASan] Move GetCurrentThread/SetCurrentThread from AsanThreadRegistry class into plain functions: they don't actually use registry
llvm-svn: 177501
2013-03-20 09:23:28 +00:00
Kostya Serebryany 67b1478914 [asan] use 4Tb of address space for the asan allocator instead of 1Tb. This increases the memory available for a single size class from 16Gb to 64Gb. The total VM footprint becomes 20Tb
llvm-svn: 176857
2013-03-12 09:04:49 +00:00
Kostya Serebryany 8ee2a5adc7 [asan] if calloc returns a freshly-mmaped memory, don't clear it with memset. Speeds up calloc-intensive code
llvm-svn: 176185
2013-02-27 13:38:19 +00:00
Kostya Serebryany 459df6f167 [asan] a bit stricter lint for CHECK vs CHECK_XX (these CHECK_XX really help debugging!)
llvm-svn: 176085
2013-02-26 12:59:06 +00:00
Timur Iskhodzhanov 167f9e4395 [ASan] Switch Windows to allocator v2, also fixing some build errors
llvm-svn: 174707
2013-02-08 12:02:00 +00:00
Alexander Potapenko f444a49310 [ASan] Implement asan_mz_size(), asan_mz_force_lock() and asan_mz_force_unlock() for allocator2.
Switch to allocator2 on Darwin.

llvm-svn: 174603
2013-02-07 11:40:03 +00:00
Evgeniy Stepanov 1bc7298c44 [asan] Fix nonsensical reports of partial right OOB.
In case of partial right OOB, ASan was reporting
  X is located 0 bytes to the right of [A, B)
where X was actually inside [A, B).

With this change, ASan will report B as the error address in such case.

llvm-svn: 174373
2013-02-05 14:32:03 +00:00
Alexey Samsonov a0c0da8f51 [ASan] Split ASan interface header into private and public parts. Add a test that makes sure users can include interface header
llvm-svn: 174058
2013-01-31 13:46:14 +00:00
Alexey Samsonov 9aa2e4f5c4 [ASan] fix deallocation hook in allocator2: according to specification, dealloc hook should be called before deallocating memory
llvm-svn: 173778
2013-01-29 08:19:11 +00:00
Alexey Samsonov 615b86cf0a [ASan] Do allocate memory even for zero-size allocation requests. Explain why we have to do this in comments.
llvm-svn: 173776
2013-01-29 07:51:34 +00:00
Alexey Samsonov 7eda134fa7 [ASan] fix a bug in allocator-v2 which could lead to SEGV on realloc(malloc(0), 4)
llvm-svn: 173681
2013-01-28 11:24:13 +00:00
Kostya Serebryany 61761f182b [asan] fix a crash in asan stats printing (initialize the allocator in __asan_init)
llvm-svn: 173676
2013-01-28 08:05:47 +00:00
Kostya Serebryany fa79cd65e2 [sanitizer] fix calloc overflow in asan/tsan/msan
llvm-svn: 173441
2013-01-25 11:46:22 +00:00
Kostya Serebryany 8f267137c2 [asan] initialize kHighMemEnd at startup (instead of at compile time) to simplify further changes for various address space layouts. Fix asan_allocator2 for PowerPC (tested on 44-bit address space)
llvm-svn: 173260
2013-01-23 13:27:43 +00:00
Alexey Samsonov 769af07372 [ASan] fix __asan_get_ownership(p) and __asan_get_allocated_size(p) for the p = malloc(0)
llvm-svn: 172717
2013-01-17 13:25:17 +00:00
Kostya Serebryany b7062cec53 [asan] asan_allocator2: fix the memalign handling (clear the first word of allocated chunk in case there is an old memalign magic)
llvm-svn: 172603
2013-01-16 09:12:14 +00:00
Dmitry Vyukov f5fa4c8a77 asan: weaken memory ordering, it's expensive in current implementation
llvm-svn: 172210
2013-01-11 16:02:31 +00:00
Kostya Serebryany 9a7e8ddb21 [asan] fid asan_allocator2 build
llvm-svn: 172194
2013-01-11 11:27:42 +00:00
Dmitry Vyukov 008dba6aa0 asan: always pass allocator cache to Allocate()
llvm-svn: 172193
2013-01-11 11:15:48 +00:00
Dmitry Vyukov b1c0dbe2c6 asan: faster quarantine
llvm-svn: 172192
2013-01-11 11:03:35 +00:00
Dmitry Vyukov db0cf871d4 asan: Refactor asan memory quarantine.
llvm-svn: 172183
2013-01-11 08:07:43 +00:00
Kostya Serebryany 8cc7b627b4 [asan] asan_allocator2: do less work under the quarantine lock; make the strcasecmp test more resistant to the contents of unaddressable memory
llvm-svn: 172048
2013-01-10 09:25:16 +00:00