summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/asan/asan_debugging.cc
diff options
context:
space:
mode:
authorAlexey Samsonov <vonosmas@gmail.com>2014-10-01 21:13:00 +0000
committerAlexey Samsonov <vonosmas@gmail.com>2014-10-01 21:13:00 +0000
commit0470e247805704b0a8e6179e72a931a6574c378e (patch)
tree60575f793d92209afdd4a140c9fbe01fd9e1055c /compiler-rt/lib/asan/asan_debugging.cc
parentf795e4805ea7e9dc1a3d8bf694ebf68811e7eb10 (diff)
downloadbcm5719-llvm-0470e247805704b0a8e6179e72a931a6574c378e.tar.gz
bcm5719-llvm-0470e247805704b0a8e6179e72a931a6574c378e.zip
[ASan] Make stack-buffer-overflow reports more robust
Summary: Fix the function that gets stack frame description by address in thread stack, so that it clearly indicates failures. Make this error non-fatal, and print as much information as we can in this case. Make all errors in ParseFrameDescription non-fatal. Test Plan: check-asan testsuite Reviewers: kcc Reviewed By: kcc Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D5554 llvm-svn: 218819
Diffstat (limited to 'compiler-rt/lib/asan/asan_debugging.cc')
-rw-r--r--compiler-rt/lib/asan/asan_debugging.cc12
1 files changed, 6 insertions, 6 deletions
diff --git a/compiler-rt/lib/asan/asan_debugging.cc b/compiler-rt/lib/asan/asan_debugging.cc
index 2b41f6785e6..ca5fa1f759f 100644
--- a/compiler-rt/lib/asan/asan_debugging.cc
+++ b/compiler-rt/lib/asan/asan_debugging.cc
@@ -28,19 +28,19 @@ void GetInfoForStackVar(uptr addr, AddressDescription *descr, AsanThread *t) {
descr->region_size = 0;
descr->region_kind = "stack";
- uptr offset = 0;
- uptr frame_pc = 0;
- const char *frame_descr = t->GetFrameNameByAddr(addr, &offset, &frame_pc);
+ AsanThread::StackFrameAccess access;
+ if (!t->GetStackFrameAccessByAddr(addr, &access))
+ return;
InternalMmapVector<StackVarDescr> vars(16);
- if (!ParseFrameDescription(frame_descr, &vars)) {
+ if (!ParseFrameDescription(access.frame_descr, &vars)) {
return;
}
for (uptr i = 0; i < vars.size(); i++) {
- if (offset <= vars[i].beg + vars[i].size) {
+ if (access.offset <= vars[i].beg + vars[i].size) {
internal_strncat(descr->name, vars[i].name_pos,
Min(descr->name_size, vars[i].name_len));
- descr->region_address = addr - (offset - vars[i].beg);
+ descr->region_address = addr - (access.offset - vars[i].beg);
descr->region_size = vars[i].size;
return;
}
OpenPOWER on IntegriCloud