[Crash-utility] Re: How to get module symbols working ?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Naveen,

On Wed, Apr 3, 2024 at 12:48 PM Naveen Chaudhary
<naveenchaudhary2010@xxxxxxxxxxx> wrote:
>
> I am analyzing the kdump in latest crash utility 8.0.4++.
>
> I think I loaded the module symbols correctly :
> crash> mod
>      MODULE       NAME              TEXT_BASE       SIZE  OBJECT FILE
> ffff80007a7e2040  npdereference  ffff80007a7e0000  12288  (not loaded)  [CONFIG_KALLSYMS]
> crash>
> crash> mod -s npdereference /home/naveen/.repos/src/arm64/linux/drivers/naveen/npdereference.ko
>      MODULE       NAME              TEXT_BASE       SIZE  OBJECT FILE
> ffff80007a7e2040  npdereference  ffff80007a7e0000  12288  /home/naveen/.repos/src/arm64/linux/drivers/naveen/npdereference.ko
>
> But still my backtrace doesn't say the correct symbol name :
> #12 [ffff800082c6ba60] _MODULE_INIT_TEXT_START_npdereference at ffff80007a7e602c [npdereference]
>
> The "sym" command also doesn't point me to the source file :
> crash> sym ffff80007a7e602c
> ffff80007a7e602c (m) _MODULE_INIT_TEXT_START_npdereference+44 [npdereference]
> crash>

I think this is correct and expected output from crash. The
"_MODULE_INIT_TEXT_START_npdereference" represents the module_init
function null_deref_module_init(). I know you are expecting the same
string as the latter, but the internal is a little different from your
thought:

The "_MODULE_INIT_TEXT_START_npdereference", or "_MODULE_INIT_START_ +
module_name", is created intentionally as a pseudo-symbol in
crash:symbols.c:store_module_symbols_v2(), as I quote it here:

st->ext_module_symtable[mcnt].value = lm->mod_init_module_ptr;
st->ext_module_symtable[mcnt].type = 'm';
st->ext_module_symtable[mcnt].flags |= MODULE_SYMBOL;
sprintf(buf3, "%s%s", "_MODULE_INIT_START_", mod_name);

The value/address of the symbol is mod_init_module_ptr, aka the
module_init function.

I don't have the history background why it is designed like this.
Let's disassemble nfsv4.ko as an example:

$ objdump -S nfsv4.ko
...
Disassembly of section .init.text:

0000000000000000 <init_module>:

static int __init init_nfs_v4(void)
{
   0:   e8 00 00 00 00          callq  5 <init_module+0x5>
   5:   53                      push   %rbx

        err = nfs_dns_resolver_init();
        if (err)
                goto out;

        err = nfs_idmap_init();
   6:   e8 00 00 00 00          callq  b <init_module+0xb>
   b:   89 c3                   mov    %eax,%ebx
        if (err)

The function name is taken as init_module instead of init_nfs_v4. So
just by guessing, such a pseudo name is better for identification.

Thanks,
Tao Liu




>
> Is there a way to make this work correctly or at least make the "sym" command point to right source file. The kernel module here is called "npdereference.ko" and is in-tree (part of kernel source repo).
>
> Regards,
> Naveen
>
> --
> Crash-utility mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxxxxxx
> To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxxxxxx
> https://${domain_name}/admin/lists/devel.lists.crash-utility.osci.io/
> Contribution Guidelines: https://github.com/crash-utility/crash/wiki
--
Crash-utility mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxxxxxx
https://${domain_name}/admin/lists/devel.lists.crash-utility.osci.io/
Contribution Guidelines: https://github.com/crash-utility/crash/wiki




[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux