diff options
author | Mitch Phillips <mitchp@google.com> | 2022-04-21 18:32:16 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-04-21 18:32:16 +0000 |
commit | 378b71eb191e4e39d0d5eaf62a6b7f4d434c7083 (patch) | |
tree | 9fabc69fa50ec636b878f36d3957fd8784951d92 | |
parent | 9c0851cc4e7164d568f5d41eea2215690af3a398 (diff) | |
parent | 5411905232e62a7328b14f7eebea2d55b09c54c1 (diff) | |
download | core-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.cpp | 10 | ||||
-rw-r--r-- | debuggerd/libdebuggerd/gwp_asan.cpp | 7 |
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; } |