From dd35cf6fc5463ff31206fbb27238b4c3802c063d Mon Sep 17 00:00:00 2001 From: Kazuhito Hagio Date: Wed, 26 Jan 2022 06:07:00 +0000 Subject: [PATCH 09/10] arm64: Fix segfault by "bt" command with offline cpus Currently on arm64, NT_PRSTATUS notes in dumpfile are not mapped to online cpus and machine_specific->panic_task_regs correctly. As a result, the "bt" command can cause a segmentation fault. crash> bt -c 0 PID: 0 TASK: ffff8000117fa240 CPU: 0 COMMAND: "swapper/0" Segmentation fault (core dumped) To fix this, 1) make map_cpus_to_prstatus_kdump_cmprs() map the notes to dd->nt_prstatus_percpu also on arm64, and 2) move arm64_get_crash_notes() to machdep_init(POST_INIT) in order to apply the mapping to machine_specific->panic_task_regs. Resolves: https://github.com/crash-utility/crash/issues/105 Reported-by: xuchunmei000 Signed-off-by: Kazuhito Hagio Tested-by: David Wysochanski --- arm64.c | 2 +- diskdump.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/arm64.c b/arm64.c index 23c3d75d85aa..4f2c2b5104a1 100644 --- a/arm64.c +++ b/arm64.c @@ -472,7 +472,7 @@ arm64_init(int when) arm64_stackframe_init(); break; - case POST_VM: + case POST_INIT: /* * crash_notes contains machine specific information about the * crash. In particular, it contains CPU registers at the time diff --git a/diskdump.c b/diskdump.c index 3e1cfd548c96..d5674276e1fd 100644 --- a/diskdump.c +++ b/diskdump.c @@ -111,8 +111,7 @@ map_cpus_to_prstatus_kdump_cmprs(void) if (pc->flags2 & QEMU_MEM_DUMP_COMPRESSED) /* notes exist for all cpus */ goto resize_note_pointers; - if (!(online = get_cpus_online()) || (online == kt->cpus) || - machine_type("ARM64")) + if (!(online = get_cpus_online()) || (online == kt->cpus)) goto resize_note_pointers; if (CRASHDEBUG(1)) -- 2.20.1