On 2023/06/08 13:31, Lianbo Jiang wrote:
Crash tool will fail to load vmcore with the following error:
#crash vmlinux /var/crash/127.0.0.1-2023-06-07-22\:03\:24/vmcore -s
crash: invalid structure size: note_buf
FILE: diskdump.c LINE: 121 FUNCTION: have_crash_notes()
[./crash] error trace: 101859ac => 10291798 => 10291450 => 10266038
10266038: SIZE_verify+156
10291450: have_crash_notes+308
10291798: map_cpus_to_prstatus_kdump_cmprs+448
101859ac: task_init+11980
The reason is that the note_buf is not intialized before using the
SIZE(note_buf) in the have_crash_notes(). Let's initialize the variable
note_buf in the ppc64_init() to fix this issue.
Thanks for the patch.
Most of the architectures already have it, but some still do not have,
e.g. is s390x ok? It might be better to put it in task_init() because
it's used there?
$ git grep 'STRUCT_SIZE_INIT(note_buf'
arm.c: STRUCT_SIZE_INIT(note_buf, "note_buf_t");
arm64.c: STRUCT_SIZE_INIT(note_buf, "note_buf_t");
mips.c: STRUCT_SIZE_INIT(note_buf, "note_buf_t");
mips64.c: STRUCT_SIZE_INIT(note_buf, "note_buf_t");
ppc.c: STRUCT_SIZE_INIT(note_buf, "note_buf_t");
riscv64.c: STRUCT_SIZE_INIT(note_buf, "note_buf_t");
x86.c: STRUCT_SIZE_INIT(note_buf, "note_buf_t");
x86_64.c: STRUCT_SIZE_INIT(note_buf, "note_buf_t");
xen_hyper.c: XEN_HYPER_STRUCT_SIZE_INIT(note_buf_t, "note_buf_t");
Thanks,
Kazu
>
> Fixes: db8c030857b4 ("diskdump/netdump: fix segmentation fault caused by failure
of stopping CPUs")
> Signed-off-by: Lianbo Jiang <lijiang(a)redhat.com>
> ---
> ppc64.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/ppc64.c b/ppc64.c
> index b95a621d8fe4..ff7f0fca3a95 100644
> --- a/ppc64.c
> +++ b/ppc64.c
> @@ -695,6 +695,7 @@ ppc64_init(int when)
> }
>
> ppc64_init_paca_info();
> + STRUCT_SIZE_INIT(note_buf, "note_buf_t");
>
> if (!machdep->hz) {
> machdep->hz = HZ;