[compiler-rt] r180180 - tsan: fix crash when data race happens on out-of-bounds accesses.
Dmitry Vyukov
dvyukov at google.com
Thu Apr 25 00:00:26 PDT 2013
Done. r180251.
On Wed, Apr 24, 2013 at 8:28 PM, Alexander Potapenko <glider at google.com> wrote:
> Test?
>
> On Wed, Apr 24, 2013 at 1:20 PM, Dmitry Vyukov <dvyukov at google.com> wrote:
>> Author: dvyukov
>> Date: Wed Apr 24 04:20:25 2013
>> New Revision: 180180
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=180180&view=rev
>> Log:
>> tsan: fix crash when data race happens on out-of-bounds accesses.
>>
>> Modified:
>> compiler-rt/trunk/lib/tsan/rtl/tsan_mman.cc
>> compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc
>> compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc
>>
>> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_mman.cc
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_mman.cc?rev=180180&r1=180179&r2=180180&view=diff
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/rtl/tsan_mman.cc (original)
>> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_mman.cc Wed Apr 24 04:20:25 2013
>> @@ -149,6 +149,7 @@ void *user_realloc(ThreadState *thr, upt
>> return 0;
>> if (p) {
>> MBlock *b = user_mblock(thr, p);
>> + CHECK_NE(b, 0);
>> internal_memcpy(p2, p, min(b->Size(), sz));
>> }
>> }
>> @@ -166,10 +167,11 @@ uptr user_alloc_usable_size(ThreadState
>> }
>>
>> MBlock *user_mblock(ThreadState *thr, void *p) {
>> - CHECK_NE(p, (void*)0);
>> + CHECK_NE(p, 0);
>> Allocator *a = allocator();
>> void *b = a->GetBlockBegin(p);
>> - CHECK_NE(b, 0);
>> + if (b == 0)
>> + return 0;
>> return (MBlock*)a->GetMetaData(b);
>> }
>>
>>
>> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc?rev=180180&r1=180179&r2=180180&view=diff
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc (original)
>> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc Wed Apr 24 04:20:25 2013
>> @@ -313,8 +313,9 @@ void ScopedReport::AddLocation(uptr addr
>> AddThread(tctx);
>> return;
>> }
>> - if (allocator()->PointerIsMine((void*)addr)) {
>> - MBlock *b = user_mblock(0, (void*)addr);
>> + MBlock *b = 0;
>> + if (allocator()->PointerIsMine((void*)addr)
>> + && (b = user_mblock(0, (void*)addr))) {
>> ThreadContext *tctx = FindThreadByTidLocked(b->Tid());
>> void *mem = internal_alloc(MBlockReportLoc, sizeof(ReportLocation));
>> ReportLocation *loc = new(mem) ReportLocation();
>>
>> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc?rev=180180&r1=180179&r2=180180&view=diff
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc (original)
>> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc Wed Apr 24 04:20:25 2013
>> @@ -82,6 +82,7 @@ SyncVar* SyncTab::GetAndLock(ThreadState
>> // the hashmap anyway.
>> if (PrimaryAllocator::PointerIsMine((void*)addr)) {
>> MBlock *b = user_mblock(thr, (void*)addr);
>> + CHECK_NE(b, 0);
>> MBlock::ScopedLock l(b);
>> SyncVar *res = 0;
>> for (res = b->ListHead(); res; res = res->next) {
>> @@ -146,6 +147,7 @@ SyncVar* SyncTab::GetAndRemove(ThreadSta
>> }
>> if (PrimaryAllocator::PointerIsMine((void*)addr)) {
>> MBlock *b = user_mblock(thr, (void*)addr);
>> + CHECK_NE(b, 0);
>> SyncVar *res = 0;
>> {
>> MBlock::ScopedLock l(b);
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
>
> --
> Alexander Potapenko
> Software Engineer
> Google Moscow
More information about the llvm-commits
mailing list