summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-18 16:59:32 +0000
committerrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-18 16:59:32 +0000
commit6a294dbaf38ff337d0d6480bab70217c39310e29 (patch)
tree18093d7b01515c9ca0da52a0626314a39eac2117
parent5c688c0d06669d91fea8e43a1c7a6a7a95e06a8a (diff)
downloadchromium_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/DEPS1
-rw-r--r--base/base.gypi3
-rw-r--r--base/process_util_linux.cc4
-rw-r--r--base/process_util_mac.mm85
-rw-r--r--base/process_util_posix.cc4
-rw-r--r--base/process_util_unittest.cc15
6 files changed, 4 insertions, 108 deletions
diff --git a/base/DEPS b/base/DEPS
index 80df202..81e9cda 100644
--- a/base/DEPS
+++ b/base/DEPS
@@ -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 {