diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/msan/msan.cc | 3 | ||||
-rw-r--r-- | lib/msan/msan.h | 2 | ||||
-rw-r--r-- | lib/msan/msan_interceptors.cc | 3 | ||||
-rw-r--r-- | lib/msan/msan_report.cc | 11 |
4 files changed, 16 insertions, 3 deletions
diff --git a/lib/msan/msan.cc b/lib/msan/msan.cc index 1df4fb8df..cb3498ef8 100644 --- a/lib/msan/msan.cc +++ b/lib/msan/msan.cc @@ -411,12 +411,13 @@ sptr __msan_test_shadow(const void *x, uptr size) { void __msan_check_mem_is_initialized(const void *x, uptr size) { if (!__msan::flags()->report_umrs) return; - sptr offset = __msan_test_shadow(x, size) < 0; + sptr offset = __msan_test_shadow(x, size); if (offset < 0) return; GET_CALLER_PC_BP_SP; (void)sp; + ReportUMRInsideAddressRange(__func__, x, size, offset); __msan::PrintWarningWithOrigin(pc, bp, __msan_get_origin(((char *)x) + offset)); if (__msan::flags()->halt_on_error) { diff --git a/lib/msan/msan.h b/lib/msan/msan.h index 74fd76ed0..c307534b0 100644 --- a/lib/msan/msan.h +++ b/lib/msan/msan.h @@ -84,6 +84,8 @@ void ReportUMR(StackTrace *stack, u32 origin); void ReportExpectedUMRNotFound(StackTrace *stack); void ReportAtExitStatistics(); void DescribeMemoryRange(const void *x, uptr size); +void ReportUMRInsideAddressRange(const char *what, const void *start, uptr size, + uptr offset); // Unpoison first n function arguments. void UnpoisonParam(uptr n); diff --git a/lib/msan/msan_interceptors.cc b/lib/msan/msan_interceptors.cc index 2062f7f4b..15f807ada 100644 --- a/lib/msan/msan_interceptors.cc +++ b/lib/msan/msan_interceptors.cc @@ -67,8 +67,7 @@ bool IsInInterceptorScope() { if (offset >= 0 && __msan::flags()->report_umrs) { \ GET_CALLER_PC_BP_SP; \ (void) sp; \ - Printf("UMR in %s at offset %d inside [%p, +%d) \n", __func__, \ - offset, x, n); \ + ReportUMRInsideAddressRange(__func__, x, n, offset); \ __msan::PrintWarningWithOrigin(pc, bp, \ __msan_get_origin((char *)x + offset)); \ if (__msan::flags()->halt_on_error) { \ diff --git a/lib/msan/msan_report.cc b/lib/msan/msan_report.cc index 12bac2e8c..453c81710 100644 --- a/lib/msan/msan_report.cc +++ b/lib/msan/msan_report.cc @@ -235,4 +235,15 @@ void DescribeMemoryRange(const void *x, uptr size) { } } +void ReportUMRInsideAddressRange(const char *what, const void *start, uptr size, + uptr offset) { + Decorator d; + Printf("%s", d.Warning()); + Printf("%sUninitialized bytes in %s%s%s at offset %zu inside [%p, %zu)%s\n", + d.Warning(), d.Name(), what, d.Warning(), offset, start, size, + d.End()); + if (__sanitizer::common_flags()->verbosity > 0) + DescribeMemoryRange(start, size); +} + } // namespace __msan |