[Crash-utility] [PATCH] arm64: Fix segfault by "bt" command with offline cpus
lijiang
lijiang at redhat.com
Sun Jan 30 03:31:44 UTC 2022
Thank you for the fix, Kazu.
Applied.
On Wed, Jan 26, 2022 at 2:07 PM HAGIO KAZUHITO(萩尾 一仁) <k-hagio-ab at nec.com>
wrote:
> 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 at linux.alibaba.com>
> Signed-off-by: Kazuhito Hagio <k-hagio-ab at nec.com>
> ---
> Note: I suspect that the machine_type("ARM64") in commit 9b41d403b16c might
> be placed for debugging and contained in the commit by accident. Because
> that segfault could be caused by the uninitialized
> machdep->process_elf_notes.
>
> 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.27.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20220130/067b12f8/attachment.htm>
More information about the Crash-utility
mailing list