[compiler-rt] r192776 - [msan] Handle origins in __sanitizer_unaligned_(load|store)*.

Evgeniy Stepanov eugeni.stepanov at gmail.com
Wed Oct 16 01:25:14 PDT 2013


Author: eugenis
Date: Wed Oct 16 03:25:13 2013
New Revision: 192776

URL: http://llvm.org/viewvc/llvm-project?rev=192776&view=rev
Log:
[msan] Handle origins in __sanitizer_unaligned_(load|store)*.

Added:
    compiler-rt/trunk/lib/msan/lit_tests/unaligned_read_origin.cc   (with props)
Modified:
    compiler-rt/trunk/lib/msan/msan.cc

Added: compiler-rt/trunk/lib/msan/lit_tests/unaligned_read_origin.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/lit_tests/unaligned_read_origin.cc?rev=192776&view=auto
==============================================================================
--- compiler-rt/trunk/lib/msan/lit_tests/unaligned_read_origin.cc (added)
+++ compiler-rt/trunk/lib/msan/lit_tests/unaligned_read_origin.cc Wed Oct 16 03:25:13 2013
@@ -0,0 +1,16 @@
+// RUN: %clangxx_msan -fsanitize-memory-track-origins -m64 -O0 %s -o %t && not %t >%t.out 2>&1
+// RUN: FileCheck %s < %t.out && FileCheck %s < %t.out
+// RUN: %clangxx_msan -fsanitize-memory-track-origins -m64 -O3 %s -o %t && not %t >%t.out 2>&1
+// RUN: FileCheck %s < %t.out && FileCheck %s < %t.out
+
+#include <sanitizer/msan_interface.h>
+
+int main(int argc, char **argv) {
+  int x;
+  int *volatile p = &x;
+  return __sanitizer_unaligned_load32(p);
+  // CHECK: WARNING: MemorySanitizer: use-of-uninitialized-value
+  // CHECK: {{#0 0x.* in main .*unaligned_read_origin.cc:}}[[@LINE-2]]
+  // CHECK: Uninitialized value was created by an allocation of 'x' in the stack frame of function 'main'
+  // CHECK: {{#0 0x.* in main .*unaligned_read_origin.cc:}}[[@LINE-7]]
+}

Propchange: compiler-rt/trunk/lib/msan/lit_tests/unaligned_read_origin.cc
------------------------------------------------------------------------------
    svn:eol-style = LF

Modified: compiler-rt/trunk/lib/msan/msan.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan.cc?rev=192776&r1=192775&r2=192776&view=diff
==============================================================================
--- compiler-rt/trunk/lib/msan/msan.cc (original)
+++ compiler-rt/trunk/lib/msan/msan.cc Wed Oct 16 03:25:13 2013
@@ -516,26 +516,38 @@ u32 __msan_get_umr_origin() {
 
 u16 __sanitizer_unaligned_load16(const uu16 *p) {
   __msan_retval_tls[0] = *(uu16 *)MEM_TO_SHADOW((uptr)p);
+  if (__msan_get_track_origins())
+    __msan_retval_origin_tls = *(uu32 *)MEM_TO_ORIGIN((uptr)p);
   return *p;
 }
 u32 __sanitizer_unaligned_load32(const uu32 *p) {
   __msan_retval_tls[0] = *(uu32 *)MEM_TO_SHADOW((uptr)p);
+  if (__msan_get_track_origins())
+    __msan_retval_origin_tls = *(uu32 *)MEM_TO_ORIGIN((uptr)p);
   return *p;
 }
 u64 __sanitizer_unaligned_load64(const uu64 *p) {
   __msan_retval_tls[0] = *(uu64 *)MEM_TO_SHADOW((uptr)p);
+  if (__msan_get_track_origins())
+    __msan_retval_origin_tls = *(uu32 *)MEM_TO_ORIGIN((uptr)p);
   return *p;
 }
 void __sanitizer_unaligned_store16(uu16 *p, u16 x) {
   *(uu16 *)MEM_TO_SHADOW((uptr)p) = __msan_param_tls[1];
+  if (__msan_get_track_origins())
+    *(uu32 *)MEM_TO_ORIGIN((uptr)p) = __msan_param_origin_tls[1];
   *p = x;
 }
 void __sanitizer_unaligned_store32(uu32 *p, u32 x) {
   *(uu32 *)MEM_TO_SHADOW((uptr)p) = __msan_param_tls[1];
+  if (__msan_get_track_origins())
+    *(uu32 *)MEM_TO_ORIGIN((uptr)p) = __msan_param_origin_tls[1];
   *p = x;
 }
 void __sanitizer_unaligned_store64(uu64 *p, u64 x) {
   *(uu64 *)MEM_TO_SHADOW((uptr)p) = __msan_param_tls[1];
+  if (__msan_get_track_origins())
+    *(uu32 *)MEM_TO_ORIGIN((uptr)p) = __msan_param_origin_tls[1];
   *p = x;
 }
 





More information about the llvm-commits mailing list