[compiler-rt] r295771 - [compiler-rt] Prevent symbolizer from starting itself.

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 21 13:39:24 PST 2017


Author: vitalybuka
Date: Tue Feb 21 15:39:24 2017
New Revision: 295771

URL: http://llvm.org/viewvc/llvm-project?rev=295771&view=rev
Log:
[compiler-rt] Prevent symbolizer from starting itself.

Summary:
If symbolizer was instrumented with sanitizer and crash, it may
try to call itself again causing infinite recursion of crashing processes.

Reviewers: eugenis

Subscribers: kubamracek, llvm-commits, dberris

Differential Revision: https://reviews.llvm.org/D30222

Modified:
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc?rev=295771&r1=295770&r2=295771&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc Tue Feb 21 15:39:24 2017
@@ -385,7 +385,23 @@ SymbolizerProcess::SymbolizerProcess(con
   CHECK_NE(path_[0], '\0');
 }
 
+static bool IsSameModule(const char* path) {
+  if (const char* ProcessName = GetProcessName()) {
+    if (const char* SymbolizerName = StripModuleName(path)) {
+      return !internal_strcmp(ProcessName, SymbolizerName);
+    }
+  }
+  return false;
+}
+
 const char *SymbolizerProcess::SendCommand(const char *command) {
+  if (failed_to_start_)
+    return nullptr;
+  if (IsSameModule(path_)) {
+    Report("WARNING: Symbolizer was blocked from starting itself!\n");
+    failed_to_start_ = true;
+    return nullptr;
+  }
   for (; times_restarted_ < kMaxTimesRestarted; times_restarted_++) {
     // Start or restart symbolizer if we failed to send command to it.
     if (const char *res = SendCommandImpl(command))




More information about the llvm-commits mailing list