From 7aad2567ee842ac046607b781da626893bb68c64 Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Fri, 24 Sep 2021 00:06:38 -0700 Subject: [PATCH] Disable scudo when using svelte config. This code was added, but a svelte config still tries to use scudo related code that doesn't exist. Bug: 201007100 Test: Ran unit tests on normal config. Test: Ran unit tests on svelte config. Change-Id: Ic84bae37717d213121aef182bac2f82dbee25213 --- debuggerd/Android.bp | 16 +++---- debuggerd/libdebuggerd/tombstone.cpp | 55 +++++++++++++--------- debuggerd/libdebuggerd/tombstone_proto.cpp | 4 ++ 3 files changed, 43 insertions(+), 32 deletions(-) diff --git a/debuggerd/Android.bp b/debuggerd/Android.bp index 9ca0eba6e..0ff047f9e 100644 --- a/debuggerd/Android.bp +++ b/debuggerd/Android.bp @@ -180,7 +180,6 @@ cc_library_static { "libdebuggerd/backtrace.cpp", "libdebuggerd/gwp_asan.cpp", "libdebuggerd/open_files_list.cpp", - "libdebuggerd/scudo.cpp", "libdebuggerd/tombstone.cpp", "libdebuggerd/tombstone_proto.cpp", "libdebuggerd/tombstone_proto_to_text.cpp", @@ -193,9 +192,6 @@ cc_library_static { include_dirs: [ // Needed for private/bionic_fdsan.h "bionic/libc", - - // Needed for scudo/interface.h - "external/scudo/standalone/include", ], header_libs: [ "bionic_libc_platform_headers", @@ -217,7 +213,6 @@ cc_library_static { whole_static_libs: [ "libasync_safe", "gwp_asan_crash_handler", - "libscudo", "libtombstone_proto", "libprocinfo", "libprotobuf-cpp-lite", @@ -246,6 +241,13 @@ cc_library_static { debuggable: { cflags: ["-DROOT_POSSIBLE"], }, + + malloc_not_svelte: { + cflags: ["-DUSE_SCUDO"], + whole_static_libs: ["libscudo"], + srcs: ["libdebuggerd/scudo.cpp"], + header_libs: ["scudo_headers"], + }, }, } @@ -316,10 +318,6 @@ cc_test { "gwp_asan_headers", ], - include_dirs: [ - "external/scudo/standalone/include", - ], - local_include_dirs: [ "libdebuggerd", ], diff --git a/debuggerd/libdebuggerd/tombstone.cpp b/debuggerd/libdebuggerd/tombstone.cpp index ff03bcd1e..ee64c3d57 100644 --- a/debuggerd/libdebuggerd/tombstone.cpp +++ b/debuggerd/libdebuggerd/tombstone.cpp @@ -57,10 +57,13 @@ #include "libdebuggerd/backtrace.h" #include "libdebuggerd/gwp_asan.h" #include "libdebuggerd/open_files_list.h" -#include "libdebuggerd/scudo.h" #include "libdebuggerd/utility.h" #include "util.h" +#if defined(USE_SCUDO) +#include "libdebuggerd/scudo.h" +#endif + #include "gwp_asan/common.h" #include "gwp_asan/crash_handler.h" @@ -115,8 +118,26 @@ static std::string get_stack_overflow_cause(uint64_t fault_addr, uint64_t sp, return ""; } -static void dump_probable_cause(log_t* log, const siginfo_t* si, unwindstack::Maps* maps, - unwindstack::Regs* regs) { +static void dump_probable_cause(log_t* log, unwindstack::Unwinder* unwinder, + const ProcessInfo& process_info, const ThreadInfo& main_thread) { +#if defined(USE_SCUDO) + ScudoCrashData scudo_crash_data(unwinder->GetProcessMemory().get(), process_info); + if (scudo_crash_data.CrashIsMine()) { + scudo_crash_data.DumpCause(log, unwinder); + return; + } +#endif + + GwpAsanCrashData gwp_asan_crash_data(unwinder->GetProcessMemory().get(), process_info, + main_thread); + if (gwp_asan_crash_data.CrashIsMine()) { + gwp_asan_crash_data.DumpCause(log); + return; + } + + unwindstack::Maps* maps = unwinder->GetMaps(); + unwindstack::Regs* regs = main_thread.registers.get(); + const siginfo_t* si = main_thread.siginfo; std::string cause; if (si->si_signo == SIGSEGV && si->si_code == SEGV_MAPERR) { if (si->si_addr < reinterpret_cast(4096)) { @@ -395,22 +416,9 @@ static bool dump_thread(log_t* log, unwindstack::Unwinder* unwinder, const Threa dump_signal_info(log, thread_info, process_info, unwinder->GetProcessMemory().get()); } - std::unique_ptr gwp_asan_crash_data; - std::unique_ptr scudo_crash_data; if (primary_thread) { - gwp_asan_crash_data = std::make_unique(unwinder->GetProcessMemory().get(), - process_info, thread_info); - scudo_crash_data = - std::make_unique(unwinder->GetProcessMemory().get(), process_info); - } + dump_probable_cause(log, unwinder, process_info, thread_info); - if (primary_thread && gwp_asan_crash_data->CrashIsMine()) { - gwp_asan_crash_data->DumpCause(log); - } else if (thread_info.siginfo && !(primary_thread && scudo_crash_data->CrashIsMine())) { - dump_probable_cause(log, thread_info.siginfo, unwinder->GetMaps(), thread_info.registers.get()); - } - - if (primary_thread) { dump_abort_message(log, unwinder->GetProcessMemory().get(), process_info.abort_msg_address); } @@ -432,16 +440,17 @@ static bool dump_thread(log_t* log, unwindstack::Unwinder* unwinder, const Threa } if (primary_thread) { - if (gwp_asan_crash_data->HasDeallocationTrace()) { - gwp_asan_crash_data->DumpDeallocationTrace(log, unwinder); + GwpAsanCrashData gwp_asan_crash_data(unwinder->GetProcessMemory().get(), process_info, + thread_info); + + if (gwp_asan_crash_data.HasDeallocationTrace()) { + gwp_asan_crash_data.DumpDeallocationTrace(log, unwinder); } - if (gwp_asan_crash_data->HasAllocationTrace()) { - gwp_asan_crash_data->DumpAllocationTrace(log, unwinder); + if (gwp_asan_crash_data.HasAllocationTrace()) { + gwp_asan_crash_data.DumpAllocationTrace(log, unwinder); } - scudo_crash_data->DumpCause(log, unwinder); - unwindstack::Maps* maps = unwinder->GetMaps(); dump_memory_and_code(log, maps, unwinder->GetProcessMemory().get(), thread_info.registers.get()); diff --git a/debuggerd/libdebuggerd/tombstone_proto.cpp b/debuggerd/libdebuggerd/tombstone_proto.cpp index 0c93c900b..d3a3211b6 100644 --- a/debuggerd/libdebuggerd/tombstone_proto.cpp +++ b/debuggerd/libdebuggerd/tombstone_proto.cpp @@ -18,7 +18,9 @@ #include "libdebuggerd/tombstone.h" #include "libdebuggerd/gwp_asan.h" +#if defined(USE_SCUDO) #include "libdebuggerd/scudo.h" +#endif #include #include @@ -185,11 +187,13 @@ void set_human_readable_cause(Cause* cause, uint64_t fault_addr) { static void dump_probable_cause(Tombstone* tombstone, unwindstack::Unwinder* unwinder, const ProcessInfo& process_info, const ThreadInfo& main_thread) { +#if defined(USE_SCUDO) ScudoCrashData scudo_crash_data(unwinder->GetProcessMemory().get(), process_info); if (scudo_crash_data.CrashIsMine()) { scudo_crash_data.AddCauseProtos(tombstone, unwinder); return; } +#endif GwpAsanCrashData gwp_asan_crash_data(unwinder->GetProcessMemory().get(), process_info, main_thread);