summaryrefslogtreecommitdiffstats
path: root/base/process_util_mac.mm
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 /base/process_util_mac.mm
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
Diffstat (limited to 'base/process_util_mac.mm')
-rw-r--r--base/process_util_mac.mm85
1 files changed, 0 insertions, 85 deletions
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 {