diff options
| author | Alexey Samsonov <vonosmas@gmail.com> | 2014-10-01 21:13:00 +0000 |
|---|---|---|
| committer | Alexey Samsonov <vonosmas@gmail.com> | 2014-10-01 21:13:00 +0000 |
| commit | 0470e247805704b0a8e6179e72a931a6574c378e (patch) | |
| tree | 60575f793d92209afdd4a140c9fbe01fd9e1055c /compiler-rt/lib/asan/asan_debugging.cc | |
| parent | f795e4805ea7e9dc1a3d8bf694ebf68811e7eb10 (diff) | |
| download | bcm5719-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.cc | 12 |
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; } |

