[compiler-rt] r175661 - [Sanitizer] Try to fix infinite loop in frame pointer unwinder
Reid Kleckner
reid at kleckner.net
Wed Feb 20 12:29:48 PST 2013
Author: rnk
Date: Wed Feb 20 14:29:48 2013
New Revision: 175661
URL: http://llvm.org/viewvc/llvm-project?rev=175661&view=rev
Log:
[Sanitizer] Try to fix infinite loop in frame pointer unwinder
Using > instead of >= ensures that each frame deref makes progress and
that we eventually terminate.
Issue: https://code.google.com/p/address-sanitizer/issues/detail?id=162
Modified:
compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc?rev=175661&r1=175660&r2=175661&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc Wed Feb 20 14:29:48 2013
@@ -131,8 +131,9 @@ void StackTrace::FastUnwindStack(uptr pc
CHECK(size == 0 && trace[0] == pc);
size = 1;
uhwptr *frame = (uhwptr *)bp;
- uhwptr *prev_frame = frame;
- while (frame >= prev_frame &&
+ uhwptr *prev_frame = frame - 1;
+ // Avoid infinite loop when frame == frame[0] by using frame > prev_frame.
+ while (frame > prev_frame &&
frame < (uhwptr *)stack_top - 2 &&
frame > (uhwptr *)stack_bottom &&
size < max_size) {
More information about the llvm-commits
mailing list