Hi lianbo > Thanks for pointing out this. Can you help to try this one?
test pass. Thanks Guanyou lijiang <liji...@redhat.com> 于2024年11月27日周三 10:16写道: > On Tue, Nov 26, 2024 at 11:46 AM Guanyou Chen <chenguanyou9...@gmail.com> > wrote: > >> Hi lianbo >> >> test case is non-elf-vmcore, so all nt_prstatus_percpu invalid pointer. >> >> > Thanks for pointing out this. Can you help to try this one? > > diff --git a/netdump.c b/netdump.c > index b4e2a5cb2037..b67bdad3c511 100644 > --- a/netdump.c > +++ b/netdump.c > @@ -2768,7 +2768,8 @@ display_regs_from_elf_notes(int cpu, FILE *ofp) > } > } > > - if ((cpu - skipped_count) >= nd->num_prstatus_notes && > + if (((cpu < 0 ) || (!nd->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; > > Lianbo > > >> 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