diff options
| author | Kuba Brecka <kuba.brecka@gmail.com> | 2016-03-21 12:12:44 +0000 |
|---|---|---|
| committer | Kuba Brecka <kuba.brecka@gmail.com> | 2016-03-21 12:12:44 +0000 |
| commit | 4b3833df7d0a2e23896f030086d92c1bd86a1328 (patch) | |
| tree | 7eea3454a4778d013a6398af778eaac6783ecd17 | |
| parent | 26bad433f901d8c55bc2af3992af0897d12a1388 (diff) | |
| download | bcm5719-llvm-4b3833df7d0a2e23896f030086d92c1bd86a1328.tar.gz bcm5719-llvm-4b3833df7d0a2e23896f030086d92c1bd86a1328.zip | |
[tsan] Add some NULL pointer checks into the debugging API
`__tsan_get_report_thread` and others can crash if a stack trace is missing, let's add the missing checks.
Differential Revision: http://reviews.llvm.org/D18306
llvm-svn: 263939
| -rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_debugging.cc | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_debugging.cc b/compiler-rt/lib/tsan/rtl/tsan_debugging.cc index 16d52a979fe..60757441671 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_debugging.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_debugging.cc @@ -86,8 +86,8 @@ int __tsan_get_report_stack(void *report, uptr idx, void **trace, const ReportDesc *rep = (ReportDesc *)report; CHECK_LT(idx, rep->stacks.Size()); ReportStack *stack = rep->stacks[idx]; - CopyTrace(stack->frames, trace, trace_size); - return 1; + if (stack) CopyTrace(stack->frames, trace, trace_size); + return stack ? 1 : 0; } SANITIZER_INTERFACE_ATTRIBUTE @@ -102,7 +102,7 @@ int __tsan_get_report_mop(void *report, uptr idx, int *tid, void **addr, *size = mop->size; *write = mop->write ? 1 : 0; *atomic = mop->atomic ? 1 : 0; - CopyTrace(mop->stack->frames, trace, trace_size); + if (mop->stack) CopyTrace(mop->stack->frames, trace, trace_size); return 1; } @@ -134,7 +134,7 @@ int __tsan_get_report_mutex(void *report, uptr idx, uptr *mutex_id, void **addr, *mutex_id = mutex->id; *addr = (void *)mutex->addr; *destroyed = mutex->destroyed; - CopyTrace(mutex->stack->frames, trace, trace_size); + if (mutex->stack) CopyTrace(mutex->stack->frames, trace, trace_size); return 1; } @@ -150,7 +150,7 @@ int __tsan_get_report_thread(void *report, uptr idx, int *tid, uptr *pid, *running = thread->running; *name = thread->name; *parent_tid = thread->parent_tid; - CopyTrace(thread->stack->frames, trace, trace_size); + if (thread->stack) CopyTrace(thread->stack->frames, trace, trace_size); return 1; } |

