diff options
author | rsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-18 16:59:32 +0000 |
---|---|---|
committer | rsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-18 16:59:32 +0000 |
commit | 6a294dbaf38ff337d0d6480bab70217c39310e29 (patch) | |
tree | 18093d7b01515c9ca0da52a0626314a39eac2117 | |
parent | 5c688c0d06669d91fea8e43a1c7a6a7a95e06a8a (diff) | |
download | chromium_src-6a294dbaf38ff337d0d6480bab70217c39310e29.zip chromium_src-6a294dbaf38ff337d0d6480bab70217c39310e29.tar.gz chromium_src-6a294dbaf38ff337d0d6480bab70217c39310e29.tar.bz2 |
Revert "[Mac] Implement base::EnableTerminationOnHeapCorruption() by overriding malloc_error_break"
This reverts commits r97315 and r97319.
BUG=none
TEST=none
TBR=mark
Review URL: http://codereview.chromium.org/7631046
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@97322 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | base/DEPS | 1 | ||||
-rw-r--r-- | base/base.gypi | 3 | ||||
-rw-r--r-- | base/process_util_linux.cc | 4 | ||||
-rw-r--r-- | base/process_util_mac.mm | 85 | ||||
-rw-r--r-- | base/process_util_posix.cc | 4 | ||||
-rw-r--r-- | base/process_util_unittest.cc | 15 |
6 files changed, 4 insertions, 108 deletions
@@ -5,7 +5,6 @@ include_rules = [ "+third_party/libevent", "+third_party/dmg_fp", "+third_party/GTM", - "+third_party/mach_override", "+third_party/modp_b64", "+third_party/tcmalloc", diff --git a/base/base.gypi b/base/base.gypi index 4363799..642e47f 100644 --- a/base/base.gypi +++ b/base/base.gypi @@ -536,9 +536,6 @@ '$(SDKROOT)/System/Library/Frameworks/Security.framework', ], }, - 'dependencies': [ - '../third_party/mach_override/mach_override.gyp:mach_override', - ], }], [ 'OS != "win"', { 'dependencies': ['../third_party/libevent/libevent.gyp:libevent'], diff --git a/base/process_util_linux.cc b/base/process_util_linux.cc index b350517..1f71f4d 100644 --- a/base/process_util_linux.cc +++ b/base/process_util_linux.cc @@ -718,10 +718,6 @@ int posix_memalign(void** ptr, size_t alignment, size_t size) { #endif // !defined(USE_TCMALLOC) } // extern C -void EnableTerminationOnHeapCorruption() { - // On Linux, there nothing to do AFAIK. -} - void EnableTerminationOnOutOfMemory() { #if defined(OS_ANDROID) // Android doesn't support setting a new handler. diff --git a/base/process_util_mac.mm b/base/process_util_mac.mm index ceb4f0a..7db44d9 100644 --- a/base/process_util_mac.mm +++ b/base/process_util_mac.mm @@ -12,8 +12,6 @@ #include <mach/mach_vm.h> #include <mach/shared_region.h> #include <mach/task.h> -#include <mach-o/dyld.h> -#include <mach-o/nlist.h> #include <malloc/malloc.h> #import <objc/runtime.h> #include <spawn.h> @@ -36,7 +34,6 @@ #include "base/time.h" #include "third_party/apple_apsl/CFBase.h" #include "third_party/apple_apsl/malloc.h" -#include "third_party/mach_override/mach_override.h" namespace base { @@ -486,88 +483,6 @@ size_t GetSystemCommitCharge() { return (data.active_count * page_size) / 1024; } -namespace { - -// Finds the library path for malloc() and thus the libC part of libSystem, -// which in Lion is in a separate image. -const char* LookUpLibCPath() { - const void* addr = reinterpret_cast<void*>(&malloc); - - Dl_info info; - if (dladdr(addr, &info)) - return info.dli_fname; - - LOG(WARNING) << "Could not find image path for malloc()"; - return NULL; -} - -typedef void(*malloc_error_break_t)(void); -malloc_error_break_t g_original_malloc_error_break = NULL; - -// Returns the function pointer for malloc_error_break. This symbol is declared -// as __private_extern__ and cannot be dlsym()ed. Instead, use nlist() to -// get it. -malloc_error_break_t LookUpMallocErrorBreak() { -#if ARCH_CPU_32_BITS - const char* lib_c_path = LookUpLibCPath(); - if (!lib_c_path) - return NULL; - - // Only need to look up two symbols, but nlist() requires a NULL-terminated - // array and takes no count. - struct nlist nl[3]; - bzero(&nl, sizeof(nl)); - - // The symbol to find. - nl[0].n_un.n_name = const_cast<char*>("_malloc_error_break"); - - // A reference symbol by which the address of the desired symbol will be - // calculated. - nl[1].n_un.n_name = const_cast<char*>("_malloc"); - - int rv = nlist(lib_c_path, nl); - if (rv != 0 || nl[0].n_type == N_UNDF || nl[1].n_type == N_UNDF) { - return NULL; - } - - // nlist() returns addresses as offsets in the image, not the instruction - // pointer in memory. Use the known in-memory address of malloc() - // to compute the offset for malloc_error_break(). - uintptr_t reference_addr = reinterpret_cast<uintptr_t>(&malloc); - reference_addr -= nl[1].n_value; - reference_addr += nl[0].n_value; - - return reinterpret_cast<malloc_error_break_t>(reference_addr); -#endif // ARCH_CPU_32_BITS - - return NULL; -} - -void CrMallocErrorBreak() { - g_original_malloc_error_break(); - LOG(ERROR) << - "Terminating process due to a potential for future heap corruption"; - base::debug::BreakDebugger(); -} - -} // namespace - -void EnableTerminationOnHeapCorruption() { - malloc_error_break_t malloc_error_break = LookUpMallocErrorBreak(); - if (!malloc_error_break) { - LOG(WARNING) << "Could not find malloc_error_break"; - return; - } - - mach_error_t err = mach_override_ptr( - (void*)malloc_error_break, - (void*)&CrMallocErrorBreak, - (void**)&g_original_malloc_error_break); - - if (err != err_none) - LOG(WARNING) << "Could not override malloc_error_break; error = " << err; -} - // ------------------------------------------------------------------------ namespace { diff --git a/base/process_util_posix.cc b/base/process_util_posix.cc index a81acbc..db380bd 100644 --- a/base/process_util_posix.cc +++ b/base/process_util_posix.cc @@ -656,6 +656,10 @@ bool LaunchProcess(const CommandLine& cmdline, ProcessMetrics::~ProcessMetrics() { } +void EnableTerminationOnHeapCorruption() { + // On POSIX, there nothing to do AFAIK. +} + bool EnableInProcessStackDumping() { // When running in an application, our code typically expects SIGPIPE // to be ignored. Therefore, when testing that same code, it should run diff --git a/base/process_util_unittest.cc b/base/process_util_unittest.cc index 8a653d4..3b05d03 100644 --- a/base/process_util_unittest.cc +++ b/base/process_util_unittest.cc @@ -397,21 +397,6 @@ TEST_F(ProcessUtilTest, LaunchAsUser) { #endif // defined(OS_WIN) -#if defined(OS_MACOSX) - -TEST_F(ProcessUtilTest, MacTerminateOnHeapCorruption) { - // Note that base::EnableTerminationOnHeapCorruption() is called as part of - // test suite setup and does not need to be done again, else mach_override - // will fail. - - char buf[3]; - ASSERT_DEATH(free(buf), "being freed.*" - "\\*\\*\\* set a breakpoint in malloc_error_break to debug.*" - "Terminating process due to a potential for future heap corruption"); -} - -#endif // defined(OS_MACOSX) - #if defined(OS_POSIX) namespace { |