[Crash-utility] Re: [PATCH v2] symbols: skip load .init.* sections if module was successfully initialized

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

 



Hi Kazu,

On Wed, Nov 15, 2023 at 3:59 PM HAGIO KAZUHITO(萩尾 一仁)
<k-hagio-ab@xxxxxxx> wrote:
>
> On 2023/11/14 17:32, Tao Liu wrote:
> > There might be address overlap of one module's .init.text symbols and
> > another module's .text symbols. As a result, gdb fails to translate the
> > address to symbol name correctly:
> >
> > crash> sym -m virtio_blk | grep MODULE
> > ffffffffc00a4000 MODULE START: virtio_blk
> > ffffffffc00a86ec MODULE END: virtio_blk
> > crash> gdb info address floppy_module_init
> > Symbol "floppy_module_init" is a function at address 0xffffffffc00a4131.
> >
> > Since the .init.* sections of a module had been freed by kernel if the
> > module was initialized successfully, there is no need to load the .init.*
> > sections data from "*.ko.debug" in gdb to create such an overlap.
> > lm->mod_init_module_ptr is used as a flag of whether module is freed.
> >
> > Without the patch:
> > crash> mod -S
> > crash> struct blk_mq_ops 0xffffffffc00a7160
> > struct blk_mq_ops {
> >    queue_rq = 0xffffffffc00a45b0 <floppy_module_init+1151>, <-- symbol translated from module floppy
> >    map_queue = 0xffffffff813015c0 <blk_mq_map_queue>,
> >    ...snip...
> >    complete = 0xffffffffc00a4370 <floppy_module_init+575>,
> >    init_request = 0xffffffffc00a4260 <floppy_module_init+303>,
> >    ...snip...
> > }
> >
> > With the patch:
> > crash> mod -S
> > crash> struct blk_mq_ops 0xffffffffc00a7160
> > struct blk_mq_ops {
> >    queue_rq = 0xffffffffc00a45b0 <virtio_queue_rq>, <-- symbol translated from module virtio_blk
> >    map_queue = 0xffffffff813015c0 <blk_mq_map_queue>,
> >    ...snip...
> >    complete = 0xffffffffc00a4370 <virtblk_request_done>,
> >    init_request = 0xffffffffc00a4260 <virtblk_init_request>,
> >    ...snip...
> > }
> >
> > Signed-off-by: Tao Liu <ltao@xxxxxxxxxx>
> > ---
> >
> > v1: [PATCH 1/2] symbols: expand kernel modules symtable before symbols translation
> >      [PATCH 2/2] symbols: fix the error belonging of the kernel modules symbols
> > v2 -> v1: Used different solution, re-drafted patch based on Kazu's comments,
> >            so v1 can be discarded.
>
> Thank you for the update, looks good.
>
> Acked-by: Kazuhito Hagio <k-hagio-ab@xxxxxxx>
>
> We're going to release a new version of crash in a few days, but I would
> like to evaluate this kind of patch for a while in actual cases.  So
> this will be not included in the release, sorry about that.
>
OK, no problem, thanks for the info.

Thanks,
Tao Liu


> Thanks,
> Kazu
>
> >
> > ---
> >   symbols.c | 2 +-
> >   1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/symbols.c b/symbols.c
> > index 8e8b4c3..dae5b04 100644
> > --- a/symbols.c
> > +++ b/symbols.c
> > @@ -13283,7 +13283,7 @@ add_symbol_file_kallsyms(struct load_module *lm, struct gnu_request *req)
> >                       shift_string_right(req->buf, strlen(buf));
> >                       BCOPY(buf, req->buf, strlen(buf));
> >                       retval = TRUE;
> > -             } else {
> > +             } else if (lm->mod_init_module_ptr || !STRNEQ(section_name, ".init.")) {
> >                       sprintf(buf, " -s %s 0x%lx", section_name, section_vaddr);
> >                       while ((len + strlen(buf)) >= buflen) {
> >                               RESIZEBUF(req->buf, buflen, buflen * 2);
--
Crash-utility mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxxxxxx
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
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