summaryrefslogtreecommitdiff
path: root/debuggerd/libdebuggerd/tombstone.cpp
diff options
context:
space:
mode:
authorMitch Phillips <mitchp@google.com>2021-01-25 17:56:37 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-01-25 17:56:37 +0000
commit0a6a89d04f94ef3f73a7d52c0751287d57e81b2c (patch)
tree292c4c5b3a6271deb446ccb3745b24332220bb53 /debuggerd/libdebuggerd/tombstone.cpp
parent074c8f348ea68c2e2a7accbcb21332f9063cc091 (diff)
parent9951b2fa1a2b302678e31ccac991d505ccda4a03 (diff)
Merge "[MTE] Cleanup tagged si_addr refs to fix mappings OOB bug." am: 1d792bf90a am: 9951b2fa1a
Original change: https://android-review.googlesource.com/c/platform/system/core/+/1556425 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: I1a84f7f3ab171ee86376c9743c478501b3d31e62
Diffstat (limited to 'debuggerd/libdebuggerd/tombstone.cpp')
-rw-r--r--debuggerd/libdebuggerd/tombstone.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/debuggerd/libdebuggerd/tombstone.cpp b/debuggerd/libdebuggerd/tombstone.cpp
index d88c5a93d1..4bd71926f9 100644
--- a/debuggerd/libdebuggerd/tombstone.cpp
+++ b/debuggerd/libdebuggerd/tombstone.cpp
@@ -151,7 +151,9 @@ static void dump_signal_info(log_t* log, const ThreadInfo& thread_info,
const ProcessInfo& process_info, unwindstack::Memory* process_memory) {
char addr_desc[64]; // ", fault addr 0x1234"
if (process_info.has_fault_address) {
- size_t addr = process_info.fault_address;
+ // SIGILL faults will never have tagged addresses, so okay to
+ // indiscriminately use the tagged address here.
+ size_t addr = process_info.maybe_tagged_fault_address;
if (thread_info.siginfo->si_signo == SIGILL) {
uint32_t instruction = {};
process_memory->Read(addr, &instruction, sizeof(instruction));
@@ -433,9 +435,8 @@ static bool dump_thread(log_t* log, unwindstack::Unwinder* unwinder, const Threa
thread_info.registers.get());
if (maps != nullptr) {
uint64_t addr = 0;
- siginfo_t* si = thread_info.siginfo;
- if (signal_has_si_addr(si)) {
- addr = reinterpret_cast<uint64_t>(si->si_addr);
+ if (process_info.has_fault_address) {
+ addr = process_info.untagged_fault_address;
}
dump_all_maps(log, unwinder, addr);
}