diff --git a/lib/sanitizer_common/sanitizer_symbolizer.cc b/lib/sanitizer_common/sanitizer_symbolizer.cc
index 7c0b981..ad6eaa6 100644
--- a/lib/sanitizer_common/sanitizer_symbolizer.cc
+++ b/lib/sanitizer_common/sanitizer_symbolizer.cc
@@ -182,6 +182,8 @@
   uptr times_restarted_;
 };
 
+static LowLevelAllocator symbolizer_allocator;  // Linker initialized.
+
 class Symbolizer {
  public:
   uptr SymbolizeCode(uptr addr, AddressInfo *frames, uptr max_frames) {
@@ -206,7 +208,6 @@
           if (!external_symbolizer_->Restart()) {
             ReportExternalSymbolizerError(
                 "WARNING: Failed to use and restart external symbolizer!\n");
-            InternalFree(external_symbolizer_);
             external_symbolizer_ = 0;
             break;
           }
@@ -220,7 +221,7 @@
     int input_fd, output_fd;
     if (!StartSymbolizerSubprocess(path_to_symbolizer, &input_fd, &output_fd))
       return false;
-    void *mem = InternalAlloc(sizeof(ExternalSymbolizer));
+    void *mem = symbolizer_allocator.Allocate(sizeof(ExternalSymbolizer));
     external_symbolizer_ = new(mem) ExternalSymbolizer(path_to_symbolizer,
                                                        input_fd, output_fd);
     return true;
@@ -229,8 +230,8 @@
  private:
   LoadedModule *FindModuleForAddress(uptr address) {
     if (modules_ == 0) {
-      modules_ = (LoadedModule*)InternalAlloc(
-          kMaxNumberOfModuleContexts * sizeof(LoadedModule));
+      modules_ = (LoadedModule*)(symbolizer_allocator.Allocate(
+          kMaxNumberOfModuleContexts * sizeof(LoadedModule)));
       CHECK(modules_);
       n_modules_ = GetListOfModules(modules_, kMaxNumberOfModuleContexts);
       CHECK_GT(n_modules_, 0);
@@ -254,11 +255,10 @@
   }
 
   static const uptr kMaxNumberOfModuleContexts = 4096;
-  // Array of module descriptions is leaked.
-  LoadedModule *modules_;
+  LoadedModule *modules_; // Array of module descriptions is leaked.
   uptr n_modules_;
 
-  ExternalSymbolizer *external_symbolizer_;
+  ExternalSymbolizer *external_symbolizer_;  // Leaked.
 };
 
 static Symbolizer symbolizer;  // Linker initialized.
diff --git a/lib/sanitizer_common/sanitizer_symbolizer_linux.cc b/lib/sanitizer_common/sanitizer_symbolizer_linux.cc
index 6a76647..61c7724 100644
--- a/lib/sanitizer_common/sanitizer_symbolizer_linux.cc
+++ b/lib/sanitizer_common/sanitizer_symbolizer_linux.cc
@@ -121,19 +121,19 @@
   DlIteratePhdrData *data = (DlIteratePhdrData*)arg;
   if (data->current_n == data->max_n)
     return 0;
-  char *module_name = 0;
+  InternalScopedBuffer<char> module_name(kMaxPathLength);
+  module_name[0] = '\0';
   if (data->current_n == 0) {
     // First module is the binary itself.
-    module_name = (char*)InternalAlloc(kMaxPathLength);
     uptr module_name_len = readlink("/proc/self/exe",
-                                    module_name, kMaxPathLength);
+                                    module_name, module_name.size());
     CHECK_NE(module_name_len, (uptr)-1);
-    CHECK_LT(module_name_len, kMaxPathLength);
+    CHECK_LT(module_name_len, module_name.size());
     module_name[module_name_len] = '\0';
   } else if (info->dlpi_name) {
-    module_name = internal_strdup(info->dlpi_name);
+    internal_strncpy(module_name, info->dlpi_name, module_name.size());
   }
-  if (module_name == 0 || module_name[0] == '\0')
+  if (module_name[0] == '\0')
     return 0;
   void *mem = &data->modules[data->current_n];
   LoadedModule *cur_module = new(mem) LoadedModule(module_name,
@@ -147,7 +147,6 @@
       cur_module->addAddressRange(cur_beg, cur_end);
     }
   }
-  InternalFree(module_name);
   return 0;
 }
 
