summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/msan/msan.cc3
-rw-r--r--lib/msan/msan.h2
-rw-r--r--lib/msan/msan_interceptors.cc3
-rw-r--r--lib/msan/msan_report.cc11
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