[compiler-rt] r206028 - [msan] mprotect() more memory to detect user code outside of application range.

Evgeniy Stepanov eugeni.stepanov at gmail.com
Fri Apr 11 05:04:30 PDT 2014


Author: eugenis
Date: Fri Apr 11 07:04:29 2014
New Revision: 206028

URL: http://llvm.org/viewvc/llvm-project?rev=206028&view=rev
Log:
[msan] mprotect() more memory to detect user code outside of application range.

Modified:
    compiler-rt/trunk/lib/msan/msan.cc
    compiler-rt/trunk/lib/msan/msan_linux.cc

Modified: compiler-rt/trunk/lib/msan/msan.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan.cc?rev=206028&r1=206027&r2=206028&view=diff
==============================================================================
--- compiler-rt/trunk/lib/msan/msan.cc (original)
+++ compiler-rt/trunk/lib/msan/msan.cc Fri Apr 11 07:04:29 2014
@@ -299,9 +299,8 @@ void __msan_init() {
   __msan_clear_on_return();
   if (__msan_get_track_origins())
     VPrintf(1, "msan_track_origins\n");
-  if (!InitShadow(/* prot1 */ false, /* prot2 */ true, /* map_shadow */ true,
-                  __msan_get_track_origins())) {
-    // FIXME: prot1 = false is only required when running under DR.
+  if (!InitShadow(/* prot1 */ !msan_running_under_dr, /* prot2 */ true,
+                  /* map_shadow */ true, __msan_get_track_origins())) {
     Printf("FATAL: MemorySanitizer can not mmap the shadow memory.\n");
     Printf("FATAL: Make sure to compile with -fPIE and to link with -pie.\n");
     Printf("FATAL: Disabling ASLR is known to cause this error.\n");

Modified: compiler-rt/trunk/lib/msan/msan_linux.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_linux.cc?rev=206028&r1=206027&r2=206028&view=diff
==============================================================================
--- compiler-rt/trunk/lib/msan/msan_linux.cc (original)
+++ compiler-rt/trunk/lib/msan/msan_linux.cc Fri Apr 11 07:04:29 2014
@@ -39,7 +39,7 @@ static const uptr kMemBeg     = 0x600000
 static const uptr kMemEnd     = 0x7fffffffffff;
 static const uptr kShadowBeg  = MEM_TO_SHADOW(kMemBeg);
 static const uptr kShadowEnd  = MEM_TO_SHADOW(kMemEnd);
-static const uptr kBad1Beg    = 0x100000000;  // 4G
+static const uptr kBad1Beg    = 0;
 static const uptr kBad1End    = kShadowBeg - 1;
 static const uptr kBad2Beg    = kShadowEnd + 1;
 static const uptr kBad2End    = kMemBeg - 1;
@@ -61,7 +61,9 @@ bool InitShadow(bool prot1, bool prot2,
   VPrintf(1, "Bad1     : %p %p\n", kBad1Beg, kBad1End);
 
   if (!MemoryRangeIsAvailable(kShadowBeg,
-                              init_origins ? kOriginsEnd : kShadowEnd)) {
+                              init_origins ? kOriginsEnd : kShadowEnd) ||
+      (prot1 && !MemoryRangeIsAvailable(kBad1Beg, kBad1End)) ||
+      (prot2 && !MemoryRangeIsAvailable(kBad2Beg, kBad2End))) {
     Printf("FATAL: Shadow memory range is not available.\n");
     return false;
   }





More information about the llvm-commits mailing list