You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.9 KiB
58 lines
1.9 KiB
From dd35cf6fc5463ff31206fbb27238b4c3802c063d Mon Sep 17 00:00:00 2001
|
|
From: Kazuhito Hagio <k-hagio-ab@nec.com>
|
|
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 <xuchunmei@linux.alibaba.com>
|
|
Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com>
|
|
Tested-by: David Wysochanski <dwysocha@redhat.com>
|
|
---
|
|
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
|
|
|
|
|