Re: [PATCH v1] module/kallsyms: Filter out local mapping symbols during module load
Tiezhu Yang <[email protected]>
| Newsgroups | org.kernel.vger.linux-modules,dev.linux.lists.loongarch,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 2026/8/8 上午11:37, Tiezhu Yang wrote: > The compiler toolchains generate internal local labels on certain > architectures (such as LoongArch) for optimizations and relocations. ... > Signed-off-by: Tiezhu Yang <[email protected]> > --- > Based on the latest modules-next branch of > https://git.kernel.org/pub/scm/linux/kernel/git/modules/linux.git > > kernel/module/kallsyms.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/kernel/module/kallsyms.c b/kernel/module/kallsyms.c > index f23126d804b2..61dd5c014a59 100644 > --- a/kernel/module/kallsyms.c > +++ b/kernel/module/kallsyms.c > @@ -130,6 +130,9 @@ void layout_symtab(struct module *mod, struct load_info *info) > > /* Compute total space required for the core symbols' strtab. */ > for (ndst = i = 0; i < nsrc; i++) { > + if (is_mapping_symbol(&info->strtab[src[i].st_name])) > + continue; > + > if (i == 0 || is_livepatch_module(mod) || > is_core_symbol(src + i, info->sechdrs, info->hdr->e_shnum, > info->index.pcpu)) { > @@ -198,6 +201,10 @@ void add_kallsyms(struct module *mod, const struct load_info *info) > src = kallsyms->symtab; > for (ndst = i = 0; i < kallsyms->num_symtab; i++) { > kallsyms->typetab[i] = elf_type(src + i, info); > + > + if (is_mapping_symbol(&kallsyms->strtab[src[i].st_name])) > + continue; > + > if (i == 0 || is_livepatch_module(mod) || > is_core_symbol(src + i, info->sechdrs, info->hdr->e_shnum, > info->index.pcpu)) { > Hi module maintainers, Regarding the feedback from the AI bot about livepatch breaking [1], there are two ways to fix it, which style do you prefer? (1) Using continue ``` diff --git a/kernel/module/kallsyms.c b/kernel/module/kallsyms.c index f23126d804b2..aece7aa49dd4 100644 --- a/kernel/module/kallsyms.c +++ b/kernel/module/kallsyms.c @@ -130,6 +130,10 @@ void layout_symtab(struct module *mod, struct load_info *info) /* Compute total space required for the core symbols' strtab. */ for (ndst = i = 0; i < nsrc; i++) { + if (!is_livepatch_module(mod) && + is_mapping_symbol(&info->strtab[src[i].st_name])) + continue; + if (i == 0 || is_livepatch_module(mod) || is_core_symbol(src + i, info->sechdrs, info->hdr->e_shnum, info->index.pcpu)) { @@ -198,6 +202,11 @@ void add_kallsyms(struct module *mod, const struct load_info *info) src = kallsyms->symtab; for (ndst = i = 0; i < kallsyms->num_symtab; i++) { kallsyms->typetab[i] = elf_type(src + i, info); + + if (!is_livepatch_module(mod) && + is_mapping_symbol(&kallsyms->strtab[src[i].st_name])) + continue; + if (i == 0 || is_livepatch_module(mod) || is_core_symbol(src + i, info->sechdrs, info->hdr->e_shnum, info->index.pcpu)) { ``` (2) Using if-statement ``` diff --git a/kernel/module/kallsyms.c b/kernel/module/kallsyms.c index f23126d804b2..b2b22b3487a8 100644 --- a/kernel/module/kallsyms.c +++ b/kernel/module/kallsyms.c @@ -130,9 +130,12 @@ void layout_symtab(struct module *mod, struct load_info *info) /* Compute total space required for the core symbols' strtab. */ for (ndst = i = 0; i < nsrc; i++) { - if (i == 0 || is_livepatch_module(mod) || + bool is_mapping = !is_livepatch_module(mod) && + is_mapping_symbol(&info->strtab[src[i].st_name]); + + if (!is_mapping && (i == 0 || is_livepatch_module(mod) || is_core_symbol(src + i, info->sechdrs, info->hdr->e_shnum, - info->index.pcpu)) { + info->index.pcpu))) { strtab_size += strlen(&info->strtab[src[i].st_name]) + 1; ndst++; } @@ -198,9 +201,13 @@ void add_kallsyms(struct module *mod, const struct load_info *info) src = kallsyms->symtab; for (ndst = i = 0; i < kallsyms->num_symtab; i++) { kallsyms->typetab[i] = elf_type(src + i, info); - if (i == 0 || is_livepatch_module(mod) || + + bool is_mapping = !is_livepatch_module(mod) && + is_mapping_symbol(&kallsyms->strtab[src[i].st_name]); + + if (!is_mapping && (i == 0 || is_livepatch_module(mod) || is_core_symbol(src + i, info->sechdrs, info->hdr->e_shnum, - info->index.pcpu)) { + info->index.pcpu))) { ssize_t ret; mod->core_kallsyms.typetab[ndst] = ``` If you have any more comments, please let me know. [1] https://lore.kernel.org/linux-modules/[email protected]/ Thanks, Tiezhu