From e8fcfee409a3d23027fefef540155e41f84c98a6 Mon Sep 17 00:00:00 2001 From: Florian Mayer Date: Mon, 4 Dec 2023 16:39:15 -0800 Subject: [PATCH] Use scudo_stack_depot_size from process_info This is a no-op but will be used in upcoming scudo changes that allow to change the depot size at process startup time, and as such we will no longer be able to call __scudo_get_stack_depot_size in debuggerd. We already did the equivalent change for the ring buffer size in https://r.android.com/q/topic:%22scudo_ring_buffer_size%22 Bug: 309446692 Change-Id: I761a7602c54a1f8f2d0575c5e011820d8dbaab63 --- debuggerd/crash_dump.cpp | 1 + debuggerd/handler/debuggerd_handler.cpp | 1 + debuggerd/include/debuggerd/handler.h | 1 + debuggerd/libdebuggerd/include/libdebuggerd/types.h | 1 + debuggerd/libdebuggerd/scudo.cpp | 2 +- debuggerd/protocol.h | 1 + 6 files changed, 6 insertions(+), 1 deletion(-) diff --git a/debuggerd/crash_dump.cpp b/debuggerd/crash_dump.cpp index 3563436ac..0899111b2 100644 --- a/debuggerd/crash_dump.cpp +++ b/debuggerd/crash_dump.cpp @@ -317,6 +317,7 @@ static void ReadCrashInfo(unique_fd& fd, siginfo_t* siginfo, process_info->gwp_asan_state = crash_info->data.d.gwp_asan_state; process_info->gwp_asan_metadata = crash_info->data.d.gwp_asan_metadata; process_info->scudo_stack_depot = crash_info->data.d.scudo_stack_depot; + process_info->scudo_stack_depot_size = crash_info->data.d.scudo_stack_depot_size; process_info->scudo_region_info = crash_info->data.d.scudo_region_info; process_info->scudo_ring_buffer = crash_info->data.d.scudo_ring_buffer; process_info->scudo_ring_buffer_size = crash_info->data.d.scudo_ring_buffer_size; diff --git a/debuggerd/handler/debuggerd_handler.cpp b/debuggerd/handler/debuggerd_handler.cpp index 01365f22f..ea07ce235 100644 --- a/debuggerd/handler/debuggerd_handler.cpp +++ b/debuggerd/handler/debuggerd_handler.cpp @@ -395,6 +395,7 @@ static int debuggerd_dispatch_pseudothread(void* arg) { ASSERT_SAME_OFFSET(scudo_region_info, scudo_region_info); ASSERT_SAME_OFFSET(scudo_ring_buffer, scudo_ring_buffer); ASSERT_SAME_OFFSET(scudo_ring_buffer_size, scudo_ring_buffer_size); + ASSERT_SAME_OFFSET(scudo_stack_depot_size, scudo_stack_depot_size); ASSERT_SAME_OFFSET(recoverable_gwp_asan_crash, recoverable_gwp_asan_crash); #undef ASSERT_SAME_OFFSET diff --git a/debuggerd/include/debuggerd/handler.h b/debuggerd/include/debuggerd/handler.h index ebb537236..de12fc622 100644 --- a/debuggerd/include/debuggerd/handler.h +++ b/debuggerd/include/debuggerd/handler.h @@ -44,6 +44,7 @@ struct __attribute__((packed)) debugger_process_info { const char* scudo_region_info; const char* scudo_ring_buffer; size_t scudo_ring_buffer_size; + size_t scudo_stack_depot_size; bool recoverable_gwp_asan_crash; }; diff --git a/debuggerd/libdebuggerd/include/libdebuggerd/types.h b/debuggerd/libdebuggerd/include/libdebuggerd/types.h index 5a2a7abad..075b12cb0 100644 --- a/debuggerd/libdebuggerd/include/libdebuggerd/types.h +++ b/debuggerd/libdebuggerd/include/libdebuggerd/types.h @@ -51,6 +51,7 @@ struct ProcessInfo { uintptr_t scudo_region_info = 0; uintptr_t scudo_ring_buffer = 0; size_t scudo_ring_buffer_size = 0; + size_t scudo_stack_depot_size = 0; bool has_fault_address = false; uintptr_t untagged_fault_address = 0; diff --git a/debuggerd/libdebuggerd/scudo.cpp b/debuggerd/libdebuggerd/scudo.cpp index 837f40612..c15bbeaca 100644 --- a/debuggerd/libdebuggerd/scudo.cpp +++ b/debuggerd/libdebuggerd/scudo.cpp @@ -42,7 +42,7 @@ ScudoCrashData::ScudoCrashData(unwindstack::Memory* process_memory, } auto stack_depot = AllocAndReadFully(process_memory, process_info.scudo_stack_depot, - __scudo_get_stack_depot_size()); + process_info.scudo_stack_depot_size); auto region_info = AllocAndReadFully(process_memory, process_info.scudo_region_info, __scudo_get_region_info_size()); std::unique_ptr ring_buffer; diff --git a/debuggerd/protocol.h b/debuggerd/protocol.h index 212d6dc28..793428ae8 100644 --- a/debuggerd/protocol.h +++ b/debuggerd/protocol.h @@ -99,6 +99,7 @@ struct __attribute__((__packed__)) CrashInfoDataDynamic : public CrashInfoDataSt uintptr_t scudo_region_info; uintptr_t scudo_ring_buffer; size_t scudo_ring_buffer_size; + size_t scudo_stack_depot_size; bool recoverable_gwp_asan_crash; };