[compiler-rt] r208195 - [msan] Fix __msan_check_mem_is_initialized and prettify its output.

Evgeniy Stepanov eugeni.stepanov at gmail.com
Wed May 7 04:50:15 PDT 2014


Author: eugenis
Date: Wed May  7 06:50:14 2014
New Revision: 208195

URL: http://llvm.org/viewvc/llvm-project?rev=208195&view=rev
Log:
[msan] Fix __msan_check_mem_is_initialized and prettify its output.

Added:
    compiler-rt/trunk/test/msan/msan_check_mem_is_initialized.cc   (with props)
Modified:
    compiler-rt/trunk/lib/msan/msan.cc
    compiler-rt/trunk/lib/msan/msan.h
    compiler-rt/trunk/lib/msan/msan_interceptors.cc
    compiler-rt/trunk/lib/msan/msan_report.cc
    compiler-rt/trunk/test/msan/getaddrinfo-positive.cc
    compiler-rt/trunk/test/msan/ioctl_custom.cc

Modified: compiler-rt/trunk/lib/msan/msan.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan.cc?rev=208195&r1=208194&r2=208195&view=diff
==============================================================================
--- compiler-rt/trunk/lib/msan/msan.cc (original)
+++ compiler-rt/trunk/lib/msan/msan.cc Wed May  7 06:50:14 2014
@@ -411,12 +411,13 @@ sptr __msan_test_shadow(const void *x, u
 
 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) {

Modified: compiler-rt/trunk/lib/msan/msan.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan.h?rev=208195&r1=208194&r2=208195&view=diff
==============================================================================
--- compiler-rt/trunk/lib/msan/msan.h (original)
+++ compiler-rt/trunk/lib/msan/msan.h Wed May  7 06:50:14 2014
@@ -84,6 +84,8 @@ void ReportUMR(StackTrace *stack, u32 or
 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);

Modified: compiler-rt/trunk/lib/msan/msan_interceptors.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_interceptors.cc?rev=208195&r1=208194&r2=208195&view=diff
==============================================================================
--- compiler-rt/trunk/lib/msan/msan_interceptors.cc (original)
+++ compiler-rt/trunk/lib/msan/msan_interceptors.cc Wed May  7 06:50:14 2014
@@ -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) {                                  \

Modified: compiler-rt/trunk/lib/msan/msan_report.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_report.cc?rev=208195&r1=208194&r2=208195&view=diff
==============================================================================
--- compiler-rt/trunk/lib/msan/msan_report.cc (original)
+++ compiler-rt/trunk/lib/msan/msan_report.cc Wed May  7 06:50:14 2014
@@ -235,4 +235,15 @@ void DescribeMemoryRange(const void *x,
   }
 }
 
+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

Modified: compiler-rt/trunk/test/msan/getaddrinfo-positive.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/msan/getaddrinfo-positive.cc?rev=208195&r1=208194&r2=208195&view=diff
==============================================================================
--- compiler-rt/trunk/test/msan/getaddrinfo-positive.cc (original)
+++ compiler-rt/trunk/test/msan/getaddrinfo-positive.cc Wed May  7 06:50:14 2014
@@ -16,7 +16,7 @@ int main(void) {
   int res = getaddrinfo("localhost", NULL, NULL, &ai);
   if (ai) z = 1; // OK
   res = getaddrinfo("localhost", NULL, &hint, &ai);
-  // CHECK: UMR in __interceptor_getaddrinfo at offset 0 inside
+  // CHECK: Uninitialized bytes in __interceptor_getaddrinfo at offset 0 inside [0x{{.*}}, 48)
   // CHECK: WARNING: MemorySanitizer: use-of-uninitialized-value
   // CHECK: #0 {{.*}} in main {{.*}}getaddrinfo-positive.cc:[[@LINE-3]]
   return 0;

Modified: compiler-rt/trunk/test/msan/ioctl_custom.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/msan/ioctl_custom.cc?rev=208195&r1=208194&r2=208195&view=diff
==============================================================================
--- compiler-rt/trunk/test/msan/ioctl_custom.cc (original)
+++ compiler-rt/trunk/test/msan/ioctl_custom.cc Wed May  7 06:50:14 2014
@@ -23,7 +23,7 @@ int main(int argc, char **argv) {
   ifc.ifc_len = sizeof(ifreqs);
 #endif
   int res = ioctl(fd, SIOCGIFCONF, (void *)&ifc);
-  // CHECK: UMR in ioctl{{.*}} at offset 0
+  // CHECK: Uninitialized bytes in ioctl{{.*}} at offset 0 inside [0x{{.*}}, 4)
   // CHECK: WARNING: MemorySanitizer: use-of-uninitialized-value
   // CHECK: #{{.*}} in main {{.*}}ioctl_custom.cc:[[@LINE-3]]
   assert(res == 0);

Added: compiler-rt/trunk/test/msan/msan_check_mem_is_initialized.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/msan/msan_check_mem_is_initialized.cc?rev=208195&view=auto
==============================================================================
--- compiler-rt/trunk/test/msan/msan_check_mem_is_initialized.cc (added)
+++ compiler-rt/trunk/test/msan/msan_check_mem_is_initialized.cc Wed May  7 06:50:14 2014
@@ -0,0 +1,28 @@
+// RUN: %clangxx_msan -m64 -O0 -g -DPOSITIVE %s -o %t
+// RUN: not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: MSAN_OPTIONS=verbosity=1 not %run %t 2>&1 | \
+// RUN:     FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-VERBOSE
+
+// RUN: %clangxx_msan -m64 -O0 -g %s -o %t && %run %t
+
+#include <sanitizer/msan_interface.h>
+
+int main(void) {
+  char p[32] = {};
+  __msan_poison(p + 10, 2);
+
+  __msan_check_mem_is_initialized(p, 10);
+  __msan_check_mem_is_initialized(p + 12, 30);
+#ifdef POSITIVE
+  __msan_check_mem_is_initialized(p + 5, 20);
+  // CHECK: Uninitialized bytes in __msan_check_mem_is_initialized at offset 5 inside [0x{{.*}}, 20)
+  // CHECK-VERBOSE: Shadow map of [0x{{.*}}, 0x{{.*}}), 20 bytes:
+  // CHECK-VERBOSE: 0x{{.*}}: ..000000 0000ffff 00000000 00000000
+  // CHECK-VERBOSE: 0x{{.*}}: 00000000 00...... ........ ........
+
+  // CHECK: WARNING: MemorySanitizer: use-of-uninitialized-value
+  // CHECK: #0 0x{{.*}}in main{{.*}}msan_check_mem_is_initialized.cc:[[@LINE-7]]
+#endif
+  return 0;
+}
+

Propchange: compiler-rt/trunk/test/msan/msan_check_mem_is_initialized.cc
------------------------------------------------------------------------------
    svn:eol-style = LF





More information about the llvm-commits mailing list