From 7f209a979c55a58e91946a2efd5f0b339ffe309c Mon Sep 17 00:00:00 2001 From: Iris Chang Date: Wed, 16 Jan 2019 11:17:15 +0800 Subject: Bionic malloc debug: add a new option "abort_on_error" This new option causes an abort after malloc debug detects an error. This allows vendors to get process coredumps to analyze memory for corruption. Bug: 123009873 Test: New test cases added for unit tests and config tests. Change-Id: I6b480af7f747d6a82f61e8bf3df204a5f7ba017f --- libc/malloc_debug/PointerData.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'libc/malloc_debug/PointerData.cpp') diff --git a/libc/malloc_debug/PointerData.cpp b/libc/malloc_debug/PointerData.cpp index b0e2fc849..638061b11 100644 --- a/libc/malloc_debug/PointerData.cpp +++ b/libc/malloc_debug/PointerData.cpp @@ -206,7 +206,7 @@ void PointerData::Remove(const void* ptr) { std::lock_guard pointer_guard(pointer_mutex_); auto entry = pointers_.find(pointer); if (entry == pointers_.end()) { - // Error. + // Attempt to remove unknown pointer. error_log("No tracked pointer found for 0x%" PRIxPTR, pointer); return; } @@ -283,6 +283,9 @@ void PointerData::LogFreeError(const FreePointerInfoType& info, size_t usable_si } error_log(LOG_DIVIDER); + if (g_debug->config().options() & ABORT_ON_ERROR) { + abort(); + } } void PointerData::VerifyFreedPointer(const FreePointerInfoType& info) { @@ -295,6 +298,9 @@ void PointerData::VerifyFreedPointer(const FreePointerInfoType& info) { error_log("+++ ALLOCATION 0x%" PRIxPTR " HAS CORRUPTED HEADER TAG 0x%x AFTER FREE", info.pointer, header->tag); error_log(LOG_DIVIDER); + if (g_debug->config().options() & ABORT_ON_ERROR) { + abort(); + } // Stop processing here, it is impossible to tell how the header // may have been damaged. -- cgit v1.2.3