Re: [PATCH] arm64: Fix segfault by "bt" command with offline cpus

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jan 26, 2022 at 1:08 AM HAGIO KAZUHITO(萩尾 一仁)
<k-hagio-ab@xxxxxxx> 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@xxxxxxxxxxxxxxxxx>
> Signed-off-by: Kazuhito Hagio <k-hagio-ab@xxxxxxx>
> ---
> 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
>
>

You can add
Tested-by: Dave Wysochanski <dwysocha@xxxxxxxxxx>

Before this patch I had a vmcore that would segfault with 'bt -a',
with backtrace as in
https://github.com/crash-utility/crash/issues/105#issuecomment-1017176451
After this patch the segfault is gone.

FWIW, I saw was some new warnings with the vmcore but may be expected:

WARNING: cannot determine starting stack frame for task ffff809920692100

WARNING: cannot determine starting stack frame for task ffff80992068ee00

WARNING: cannot determine starting stack frame for task ffff80992069ed00
WARNING: cpu 4: cannot find NT_PRSTATUS note
WARNING: cpu 5: cannot find NT_PRSTATUS note
WARNING: cpu 6: cannot find NT_PRSTATUS note
WARNING: cpu 7: cannot find NT_PRSTATUS note
WARNING: cpu 8: cannot find NT_PRSTATUS note
WARNING: cpu 9: cannot find NT_PRSTATUS note
WARNING: cpu 10: cannot find NT_PRSTATUS note
WARNING: cpu 11: cannot find NT_PRSTATUS note



> --
> Crash-utility mailing list
> Crash-utility@xxxxxxxxxx
> https://listman.redhat.com/mailman/listinfo/crash-utility
>


--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://listman.redhat.com/mailman/listinfo/crash-utility




[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux