On Mon, Jul 24, 2023 at 10:29 AM HAGIO KAZUHITO(萩尾 一仁) <k-hagio...@nec.com>
wrote:

> On 2023/07/24 10:17, HAGIO KAZUHITO(萩尾 一仁) wrote:
> > Hi Lianbo,
> >
> > Thank you for the fix.
> >
> > On 2023/07/21 13:36, Lianbo Jiang wrote:
> >> Currently, the symbol ".rodata" may not be found in some vmlinux, and
> >> the strings command will still be used to get the linux banner string,
> >> but this gets two strings as below:
> >>
> >>     # strings
> /usr/lib/debug/usr/lib/modules/6.5.0-0.rc2.17.fc39.x86_64/vmlinux |grep
> "Linux version"
> >>     Linux version 6.5.0-0.rc2.17.fc39.x86_64
> (mockbuild@23a79bad375e4c2c8c60f2d40df7df49) (gcc (GCC) 13.1.1 20230614
> (Red Hat 13.1.1-4), GNU ld version 2.40-9.fc39) # SMP PREEMPT_DYNAMIC
> >>     Linux version 6.5.0-0.rc2.17.fc39.x86_64
> (mockbuild@23a79bad375e4c2c8c60f2d40df7df49) (gcc (GCC) 13.1.1 20230614
> (Red Hat 13.1.1-4), GNU ld version 2.40-9.fc39) #1 SMP PREEMPT_DYNAMIC Mon
> Jul 17 14:57:35 UTC 2023
> >>
> >> In the verify_namelist(), the while-loop will only determine if the
> >> above first string(linux banner) matches and break the loop. But
> >> actually the above second string is correct one. Eventually, crash
> >> startup with the following warning:
> >>
> >>     # ./crash -s
> /usr/lib/debug/usr/lib/modules/6.5.0-0.rc2.17.fc39.x86_64/vmlinux
> /var/crash/127.0.0.1-2023-07-20-20\:50\:50/vmcore
> >>     WARNING: kernel version inconsistency between vmlinux and dumpfile
> >>
> >>     # ./crash -s
> >>     WARNING: kernel version inconsistency between vmlinux and live
> memory
> >>
> >> Let's always try to match the correct one, otherwise still prints a
> >> warning as before.
> >>
> >> Signed-off-by: Lianbo Jiang <liji...@redhat.com>
> >> ---
> >>    kernel.c | 2 --
> >>    1 file changed, 2 deletions(-)
> >>
> >> diff --git a/kernel.c b/kernel.c
> >> index 546eed95eebd..9801812387bd 100644
> >> --- a/kernel.c
> >> +++ b/kernel.c
> >> @@ -1375,8 +1375,6 @@ verify_namelist()
> >>                              buffer3[i++] = *p1++;
> >>                      buffer3[i] = NULLCHAR;
> >>              }
> >> -
> >> -            break;
> >>            }
> >>            pclose(pipe);
> >>
> >
> > I think you are fixing the fallback routine and that's good, but it's
> > better to fix get_linux_banner_from_vmlinux() first if possible.  It's
>

Thank you for the comments, Kazu.

They are different issues. The fallback routine(strings) also needs to be
fixed, and the get_linux_banner_from_vmlinux() failure is another issue.

> much faster.  Isn't it possible?
> >


As I mentioned in patch log, the symbol ".rodata" was not found in some
vmlinux, and so far I haven't got any equivalent symbols to achieve the
purpose.

crash> sym .rodata
symbol not found: .rodata
possible alternatives:
  (none found)
crash>

But the following change works well for this case:

diff --git a/kernel.c b/kernel.c
index 546eed9..a4ce5bf 100644
--- a/kernel.c
+++ b/kernel.c
@@ -11891,6 +11891,7 @@ check_vmcoreinfo(void)
 static
 int get_linux_banner_from_vmlinux(char *buf, size_t size)
 {
+#if 0
        struct bfd_section *sect;
        long offset;

@@ -11917,4 +11918,10 @@ int get_linux_banner_from_vmlinux(char *buf,
size_t size)
                return FALSE;

        return TRUE;
+#else
+       if (!readmem(symbol_value("linux_banner"), KVADDR, buf, size,
"linux_banner", RETURN_ON_ERROR))
+               return FALSE;
+
+       return TRUE;
+#endif
 }

How about reading out the linux_banner string to a buffer with readmem()?


> > What do you see in "sections:" in "help -s"?  And probably you can
> > determine the section where linux_banner is located, with the address of
> > linux_banner and KASLR offset.
> >
> > crash> help -s
> > ...
> >               sections:
> >                       .text  vma: ffffffff81000000  size: 14686984
> >                     .rodata  vma: ffffffff82000000  size: 5366231
> >                  .pci_fixup  vma: ffffffff8251e1e0  size: 14112
> > ...
> > crash> sym linux_banner
> > ffffffffb5200a40 (D) linux_banner
> > crash> help -D | grep KERNELOFFSET
> >         KERNELOFFSET=33200000
> >
> > crash> eval ffffffffb5200a40 - 0x33200000
> > hexadecimal: ffffffff82000a40   --> linux_banner is in ".rodata"
>
> If the vmlinux does not have only the ".rodata" symbol, is it possible
> to use "__start_rodata" symbol or something?  i.e. is there no symbol
> that has the same address as .rodata section?
>
>
I tried the "__start_rodata" symbol, but it does not work.

Thanks.
Lianbo

crash> sym .rodata __start_rodata
> ffffffffb5200000 (d) .rodata
> ffffffffb5200000 (D) __start_rodata
>
> Thanks,
> Kazu
>
--
Crash-utility mailing list
Crash-utility@redhat.com
https://listman.redhat.com/mailman/listinfo/crash-utility
Contribution Guidelines: https://github.com/crash-utility/crash/wiki

Reply via email to