summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2012-11-30 06:39:01 +0000
committerDmitry Vyukov <dvyukov@google.com>2012-11-30 06:39:01 +0000
commit0a4d875c4825468cfbe8ec4d8c399dc606a5ec52 (patch)
tree732f8b962017d42bcaaf6bf94912d9833bc27a5b
parentdea98de3fb4bea09b3ed3a68d90a03e21546b5b0 (diff)
downloadbcm5719-llvm-0a4d875c4825468cfbe8ec4d8c399dc606a5ec52.tar.gz
bcm5719-llvm-0a4d875c4825468cfbe8ec4d8c399dc606a5ec52.zip
tsan: fix bug that leads to spurious use-after-free reports
llvm-svn: 168985
-rw-r--r--compiler-rt/lib/tsan/rtl/tsan_rtl.cc2
1 files changed, 2 insertions, 0 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_rtl.cc b/compiler-rt/lib/tsan/rtl/tsan_rtl.cc
index e252728b8de..26ad7847bf9 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_rtl.cc
+++ b/compiler-rt/lib/tsan/rtl/tsan_rtl.cc
@@ -519,6 +519,7 @@ void MemoryResetRange(ThreadState *thr, uptr pc, uptr addr, uptr size) {
void MemoryRangeFreed(ThreadState *thr, uptr pc, uptr addr, uptr size) {
MemoryAccessRange(thr, pc, addr, size, true);
Shadow s(thr->fast_state);
+ s.ClearIgnoreBit();
s.MarkAsFreed();
s.SetWrite(true);
s.SetAddr0AndSizeLog(0, 3);
@@ -527,6 +528,7 @@ void MemoryRangeFreed(ThreadState *thr, uptr pc, uptr addr, uptr size) {
void MemoryRangeImitateWrite(ThreadState *thr, uptr pc, uptr addr, uptr size) {
Shadow s(thr->fast_state);
+ s.ClearIgnoreBit();
s.SetWrite(true);
s.SetAddr0AndSizeLog(0, 3);
MemoryRangeSet(thr, pc, addr, size, s.raw());
OpenPOWER on IntegriCloud