diff options
-rw-r--r-- | compiler-rt/lib/asan/asan_allocator.cc | 4 | ||||
-rw-r--r-- | compiler-rt/lib/asan/asan_internal.h | 1 | ||||
-rw-r--r-- | compiler-rt/lib/asan/asan_report.cc | 1 | ||||
-rw-r--r-- | compiler-rt/lib/asan/asan_thread.cc | 20 |
4 files changed, 7 insertions, 19 deletions
diff --git a/compiler-rt/lib/asan/asan_allocator.cc b/compiler-rt/lib/asan/asan_allocator.cc index d864ea1f793..de37137562e 100644 --- a/compiler-rt/lib/asan/asan_allocator.cc +++ b/compiler-rt/lib/asan/asan_allocator.cc @@ -998,10 +998,6 @@ void FakeStack::OnFree(uptr ptr, uptr size, uptr real_stack) { CHECK(fake_frame->descr != 0); CHECK(fake_frame->size_minus_one == size - 1); PoisonShadow(ptr, size, kAsanStackAfterReturnMagic); - CHECK(size >= SHADOW_GRANULARITY); - // Poison the leftmost shadow byte with a special value so that we can find - // the beginning of the fake frame when reporting an error. - PoisonShadow(ptr, SHADOW_GRANULARITY, kAsanStackAfterReturnLeftMagic); } } // namespace __asan diff --git a/compiler-rt/lib/asan/asan_internal.h b/compiler-rt/lib/asan/asan_internal.h index a473a046757..f9a6149245e 100644 --- a/compiler-rt/lib/asan/asan_internal.h +++ b/compiler-rt/lib/asan/asan_internal.h @@ -160,7 +160,6 @@ const int kAsanStackPartialRedzoneMagic = 0xf4; const int kAsanStackAfterReturnMagic = 0xf5; const int kAsanInitializationOrderMagic = 0xf6; const int kAsanUserPoisonedMemoryMagic = 0xf7; -const int kAsanStackAfterReturnLeftMagic = 0xf8; const int kAsanGlobalRedzoneMagic = 0xf9; const int kAsanInternalHeapMagic = 0xfe; diff --git a/compiler-rt/lib/asan/asan_report.cc b/compiler-rt/lib/asan/asan_report.cc index 86bb66cdfc7..2fbf8fd8ac8 100644 --- a/compiler-rt/lib/asan/asan_report.cc +++ b/compiler-rt/lib/asan/asan_report.cc @@ -450,7 +450,6 @@ void __asan_report_error(uptr pc, uptr bp, uptr sp, bug_descr = "stack-buffer-overflow"; break; case kAsanStackAfterReturnMagic: - case kAsanStackAfterReturnLeftMagic: bug_descr = "stack-use-after-return"; break; case kAsanUserPoisonedMemoryMagic: diff --git a/compiler-rt/lib/asan/asan_thread.cc b/compiler-rt/lib/asan/asan_thread.cc index df764a96f58..bafa5a8dcb2 100644 --- a/compiler-rt/lib/asan/asan_thread.cc +++ b/compiler-rt/lib/asan/asan_thread.cc @@ -118,41 +118,35 @@ void AsanThread::ClearShadowForThreadStack() { const char *AsanThread::GetFrameNameByAddr(uptr addr, uptr *offset) { uptr bottom = 0; - bool is_fake_stack = false; if (AddrIsInStack(addr)) { bottom = stack_bottom(); } else { bottom = fake_stack().AddrIsInFakeStack(addr); CHECK(bottom); - is_fake_stack = true; + *offset = addr - bottom; + return (const char *)((uptr*)bottom)[1]; } uptr aligned_addr = addr & ~(__WORDSIZE/8 - 1); // align addr. u8 *shadow_ptr = (u8*)MemToShadow(aligned_addr); u8 *shadow_bottom = (u8*)MemToShadow(bottom); while (shadow_ptr >= shadow_bottom && - *shadow_ptr != kAsanStackLeftRedzoneMagic && - *shadow_ptr != kAsanStackAfterReturnLeftMagic) { + *shadow_ptr != kAsanStackLeftRedzoneMagic) { shadow_ptr--; } while (shadow_ptr >= shadow_bottom && - (*shadow_ptr == kAsanStackLeftRedzoneMagic || - *shadow_ptr == kAsanStackAfterReturnLeftMagic)) { + *shadow_ptr == kAsanStackLeftRedzoneMagic) { shadow_ptr--; } if (shadow_ptr < shadow_bottom) { - // If we're one byte below the fake stack bottom, we've found the frame. - if (!is_fake_stack || (*shadow_bottom != kAsanStackAfterReturnLeftMagic)) { - *offset = 0; - return "UNKNOWN"; - } + *offset = 0; + return "UNKNOWN"; } uptr* ptr = (uptr*)SHADOW_TO_MEM((uptr)(shadow_ptr + 1)); - CHECK((ptr[0] == kCurrentStackFrameMagic) || - (is_fake_stack && ptr[0] == kRetiredStackFrameMagic)); + CHECK(ptr[0] == kCurrentStackFrameMagic); *offset = addr - (uptr)ptr; return (const char*)ptr[1]; } |