Hi lianbo test case is non-elf-vmcore, so all nt_prstatus_percpu invalid pointer.
Thanks Guanyou. lijiang <liji...@redhat.com> 于2024年11月26日周二 11:27写道: > Hi, Guanyou > Thank you for the fix. > On Mon, Nov 4, 2024 at 4:13 PM <devel-requ...@lists.crash-utility.osci.io> > wrote: > >> Date: Fri, 1 Nov 2024 18:01:27 +0800 >> From: Guanyou Chen <chenguanyou9...@gmail.com> >> Subject: [Crash-utility] [PATCH] bugfix command "help -r" segv fault >> To: Lianbo <liji...@redhat.com>, Tao Liu <l...@redhat.com>, >> devel@lists.crash-utility.osci.io >> Message-ID: >> <CAHS3RMU3nuiqW4z= >> qo9roufadruxcalhyjnxwmcugodb_+3...@mail.gmail.com> >> Content-Type: multipart/mixed; boundary="00000000000065fc530625d705b8" >> >> --00000000000065fc530625d705b8 >> Content-Type: multipart/alternative; >> boundary="00000000000065fc530625d705b6" >> >> --00000000000065fc530625d705b6 >> Content-Type: text/plain; charset="UTF-8" >> >> Hi Lianbo, Tao >> >> When the ELF Note does not contain CPU registers, >> attempting to retrieve online CPU registers will cause a crash. >> >> After: >> CPU 6: >> help: registers not collected for cpu 6 >> ... >> >> Signed-off-by: Guanyou.Chen <chenguan...@xiaomi.com> >> --- >> netdump.c | 16 ++++++++++++++++ >> 1 file changed, 16 insertions(+) >> >> diff --git a/netdump.c b/netdump.c >> index 8ea5159..435793b 100644 >> --- a/netdump.c >> +++ b/netdump.c >> @@ -2780,6 +2780,10 @@ display_regs_from_elf_notes(int cpu, FILE *ofp) >> > > I copied the code block here: > display_regs_from_elf_notes(int cpu, FILE *ofp) > { > Elf32_Nhdr *note32; > Elf64_Nhdr *note64; > size_t len; > char *user_regs; > int c, skipped_count; > > /* > * Kdump NT_PRSTATUS notes are only related to online cpus, > * so offline cpus should be skipped. > */ > if (pc->flags2 & QEMU_MEM_DUMP_ELF) > skipped_count = 0; > else { > for (c = skipped_count = 0; c < cpu; c++) { > if (check_offline_cpu(c)) > skipped_count++; > } > } > > if ((cpu - skipped_count) >= nd->num_prstatus_notes && > !machine_type("MIPS")) { > error(INFO, "registers not collected for cpu %d\n", cpu); > return; > } > ... > Could you please point out why the above check does not work? > > BTW: I'm not sure if it can work for you, can you help to try this? Just a > guess. > > if (((cpu < 0 ) || (!dd->nt_prstatus_percpu[cpu]) > || (cpu - skipped_count) >= nd->num_prstatus_notes) && > !machine_type("MIPS")) { > error(INFO, "registers not collected for cpu %d\n", cpu); > return; > } > > Thanks > Lianbo > > > nd->nt_prstatus_percpu[cpu]; >> else >> note64 = (Elf64_Nhdr *)nd->nt_prstatus; >> + if (!note64) { >> + error(INFO, "registers not collected for cpu %d\n", cpu); >> + return; >> + } >> len = sizeof(Elf64_Nhdr); >> len = roundup(len + note64->n_namesz, 4); >> len = roundup(len + note64->n_descsz, 4); >> @@ -2820,6 +2824,10 @@ display_regs_from_elf_notes(int cpu, FILE *ofp) >> nd->nt_prstatus_percpu[cpu]; >> else >> note32 = (Elf32_Nhdr *)nd->nt_prstatus; >> + if (!note32) { >> + error(INFO, "registers not collected for cpu %d\n", cpu); >> + return; >> + } >> len = sizeof(Elf32_Nhdr); >> len = roundup(len + note32->n_namesz, 4); >> len = roundup(len + note32->n_descsz, 4); >> @@ -2857,6 +2865,10 @@ display_regs_from_elf_notes(int cpu, FILE *ofp) >> else >> note64 = (Elf64_Nhdr *)nd->nt_prstatus; >> >> + if (!note64) { >> + error(INFO, "registers not collected for cpu %d\n", cpu); >> + return; >> + } >> prs = (struct ppc64_elf_prstatus *) >> ((char *)note64 + sizeof(Elf64_Nhdr) + note64->n_namesz); >> prs = (struct ppc64_elf_prstatus *)roundup((ulong)prs, 4); >> @@ -2903,6 +2915,10 @@ display_regs_from_elf_notes(int cpu, FILE *ofp) >> nd->nt_prstatus_percpu[cpu]; >> else >> note64 = (Elf64_Nhdr *)nd->nt_prstatus; >> + if (!note64) { >> + error(INFO, "registers not collected for cpu %d\n", cpu); >> + return; >> + } >> len = sizeof(Elf64_Nhdr); >> len = roundup(len + note64->n_namesz, 4); >> len = roundup(len + note64->n_descsz, 4); >> -- >> 2.34.1 >> >> Guanyou. >> Thanks >> >
-- Crash-utility mailing list -- devel@lists.crash-utility.osci.io To unsubscribe send an email to devel-le...@lists.crash-utility.osci.io https://${domain_name}/admin/lists/devel.lists.crash-utility.osci.io/ Contribution Guidelines: https://github.com/crash-utility/crash/wiki