[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