summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitch Phillips <mitchp@google.com>2022-04-21 18:32:16 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-04-21 18:32:16 +0000
commit378b71eb191e4e39d0d5eaf62a6b7f4d434c7083 (patch)
tree9fabc69fa50ec636b878f36d3957fd8784951d92
parent9c0851cc4e7164d568f5d41eea2215690af3a398 (diff)
parent5411905232e62a7328b14f7eebea2d55b09c54c1 (diff)
downloadcore-378b71eb191e4e39d0d5eaf62a6b7f4d434c7083.tar.gz
Merge "[GWP-ASan] Enable debuggerd to pull more allocation metadata." am: 5411905232
Original change: https://android-review.googlesource.com/c/platform/system/core/+/2040808 Change-Id: I6b4bb5d72854ba41274df8c0d954f78677163237 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--debuggerd/debuggerd_test.cpp10
-rw-r--r--debuggerd/libdebuggerd/gwp_asan.cpp7
2 files changed, 13 insertions, 4 deletions
diff --git a/debuggerd/debuggerd_test.cpp b/debuggerd/debuggerd_test.cpp
index 5a9d4f2a6..f4ba34790 100644
--- a/debuggerd/debuggerd_test.cpp
+++ b/debuggerd/debuggerd_test.cpp
@@ -113,8 +113,14 @@ constexpr char kWaitForDebuggerKey[] = "debug.debuggerd.wait_for_debugger";
// Enable GWP-ASan at the start of this process. GWP-ASan is enabled using
// process sampling, so we need to ensure we force GWP-ASan on.
__attribute__((constructor)) static void enable_gwp_asan() {
- bool force = true;
- android_mallopt(M_INITIALIZE_GWP_ASAN, &force, sizeof(force));
+ android_mallopt_gwp_asan_options_t opts;
+ // No, we're not an app, but let's turn ourselves on without sampling.
+ // Technically, if someone's using the *.default_app sysprops, they'll adjust
+ // our settings, but I don't think this will be common on a device that's
+ // running debuggerd_tests.
+ opts.desire = android_mallopt_gwp_asan_options_t::Action::TURN_ON_FOR_APP;
+ opts.program_name = "";
+ android_mallopt(M_INITIALIZE_GWP_ASAN, &opts, sizeof(android_mallopt_gwp_asan_options_t));
}
static void tombstoned_intercept(pid_t target_pid, unique_fd* intercept_fd, unique_fd* output_fd,
diff --git a/debuggerd/libdebuggerd/gwp_asan.cpp b/debuggerd/libdebuggerd/gwp_asan.cpp
index b2077baf1..3d9662793 100644
--- a/debuggerd/libdebuggerd/gwp_asan.cpp
+++ b/debuggerd/libdebuggerd/gwp_asan.cpp
@@ -43,10 +43,13 @@ static bool retrieve_gwp_asan_state(unwindstack::Memory* process_memory, uintptr
static const gwp_asan::AllocationMetadata* retrieve_gwp_asan_metadata(
unwindstack::Memory* process_memory, const gwp_asan::AllocatorState& state,
uintptr_t metadata_addr) {
- if (state.MaxSimultaneousAllocations > 1024) {
+ // 1 million GWP-ASan slots would take 4.1GiB of space. Thankfully, copying
+ // the metadata for that amount of slots is only 532MiB, and this really will
+ // only be used with some ridiculous torture-tests.
+ if (state.MaxSimultaneousAllocations > 1000000) {
ALOGE(
"Error when retrieving GWP-ASan metadata, MSA from state (%zu) "
- "exceeds maximum allowed (1024).",
+ "exceeds maximum allowed (1,000,000).",
state.MaxSimultaneousAllocations);
return nullptr;
}