On Wed, Nov 27, 2024 at 11:09 AM Guanyou Chen <chenguanyou9...@gmail.com> wrote:
> Hi lianbo > > > Thanks for pointing out this. Can you help to try this one? > > test pass. > > Thank you for the confirmation, Guanyou. Lets pick up this one. so: Ack(with this correction) Thanks Lianbo > 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