[llvm-branch-commits] [compiler-rt-branch] r369897 - Merge r369708 - [Sanitizer] checks ASLR on FreeBSD

Hans Wennborg via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Aug 26 05:15:55 PDT 2019


Author: hans
Date: Mon Aug 26 05:15:54 2019
New Revision: 369897

URL: http://llvm.org/viewvc/llvm-project?rev=369897&view=rev
Log:
Merge r369708 - [Sanitizer] checks ASLR on FreeBSD

Modified:
    compiler-rt/branches/release_90/lib/asan/asan_rtl.cc
    compiler-rt/branches/release_90/lib/msan/msan.cc
    compiler-rt/branches/release_90/lib/sanitizer_common/sanitizer_linux.cc

Modified: compiler-rt/branches/release_90/lib/asan/asan_rtl.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/branches/release_90/lib/asan/asan_rtl.cc?rev=369897&r1=369896&r2=369897&view=diff
==============================================================================
--- compiler-rt/branches/release_90/lib/asan/asan_rtl.cc (original)
+++ compiler-rt/branches/release_90/lib/asan/asan_rtl.cc Mon Aug 26 05:15:54 2019
@@ -402,7 +402,6 @@ static void AsanInitInternal() {
   asan_init_is_running = true;
 
   CacheBinaryName();
-  CheckASLR();
 
   // Initialize flags. This must be done early, because most of the
   // initialization steps look at flags().
@@ -450,6 +449,7 @@ static void AsanInitInternal() {
   SetLowLevelAllocateCallback(OnLowLevelAllocate);
 
   InitializeAsanInterceptors();
+  CheckASLR();
 
   // Enable system log ("adb logcat") on Android.
   // Doing this before interceptors are initialized crashes in:

Modified: compiler-rt/branches/release_90/lib/msan/msan.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/branches/release_90/lib/msan/msan.cc?rev=369897&r1=369896&r2=369897&view=diff
==============================================================================
--- compiler-rt/branches/release_90/lib/msan/msan.cc (original)
+++ compiler-rt/branches/release_90/lib/msan/msan.cc Mon Aug 26 05:15:54 2019
@@ -403,7 +403,6 @@ void __msan_init() {
   AvoidCVE_2016_2143();
 
   CacheBinaryName();
-  CheckASLR();
   InitializeFlags();
 
   // Install tool-specific callbacks in sanitizer_common.
@@ -412,6 +411,7 @@ void __msan_init() {
   __sanitizer_set_report_path(common_flags()->log_path);
 
   InitializeInterceptors();
+  CheckASLR();
   InitTlsSize();
   InstallDeadlySignalHandlers(MsanOnDeadlySignal);
   InstallAtExitHandler(); // Needs __cxa_atexit interceptor.

Modified: compiler-rt/branches/release_90/lib/sanitizer_common/sanitizer_linux.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/branches/release_90/lib/sanitizer_common/sanitizer_linux.cc?rev=369897&r1=369896&r2=369897&view=diff
==============================================================================
--- compiler-rt/branches/release_90/lib/sanitizer_common/sanitizer_linux.cc (original)
+++ compiler-rt/branches/release_90/lib/sanitizer_common/sanitizer_linux.cc Mon Aug 26 05:15:54 2019
@@ -2011,6 +2011,35 @@ void CheckASLR() {
     CHECK_NE(personality(old_personality | ADDR_NO_RANDOMIZE), -1);
     ReExec();
   }
+#elif SANITIZER_FREEBSD
+  int aslr_pie;
+  uptr len = sizeof(aslr_pie);
+#if SANITIZER_WORDSIZE == 64
+  if (UNLIKELY(internal_sysctlbyname("kern.elf64.aslr.pie_enable",
+      &aslr_pie, &len, NULL, 0) == -1)) {
+    // We're making things less 'dramatic' here since
+    // the OID is not necessarily guaranteed to be here
+    // just yet regarding FreeBSD release
+    return;
+  }
+
+  if (aslr_pie > 0) {
+    Printf("This sanitizer is not compatible with enabled ASLR "
+           "and binaries compiled with PIE\n");
+    Die();
+  }
+#endif
+  // there might be 32 bits compat for 64 bits
+  if (UNLIKELY(internal_sysctlbyname("kern.elf32.aslr.pie_enable",
+      &aslr_pie, &len, NULL, 0) == -1)) {
+    return;
+  }
+
+  if (aslr_pie > 0) {
+    Printf("This sanitizer is not compatible with enabled ASLR "
+           "and binaries compiled with PIE\n");
+    Die();
+  }
 #else
   // Do nothing
 #endif




More information about the llvm-branch-commits mailing list