diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2012-11-30 06:39:01 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2012-11-30 06:39:01 +0000 |
commit | 0a4d875c4825468cfbe8ec4d8c399dc606a5ec52 (patch) | |
tree | 732f8b962017d42bcaaf6bf94912d9833bc27a5b | |
parent | dea98de3fb4bea09b3ed3a68d90a03e21546b5b0 (diff) | |
download | bcm5719-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.cc | 2 |
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()); |