All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexey Gladkov <legion@kernel.org>
To: Masahiro Yamada <masahiroy@kernel.org>
Cc: Petr Pavlu <petr.pavlu@suse.com>,
	Luis Chamberlain <mcgrof@kernel.org>,
	Sami Tolvanen <samitolvanen@google.com>,
	Daniel Gomez <da.gomez@samsung.com>,
	Nathan Chancellor <nathan@kernel.org>,
	Nicolas Schier <nicolas.schier@linux.dev>,
	linux-kernel@vger.kernel.org, linux-modules@vger.kernel.org,
	linux-kbuild@vger.kernel.org
Subject: Re: [PATCH v3 3/6] modpost: Make mod_device_table aliases more unique
Date: Mon, 2 Jun 2025 10:06:59 +0200	[thread overview]
Message-ID: <aD1bozP0l67f_wbs@example.org> (raw)
In-Reply-To: <CAK7LNARkhc40UfrmmqsqmqkCn60=7zHc=pDFGR4o=k2p7CsABA@mail.gmail.com>

On Mon, Jun 02, 2025 at 04:45:36PM +0900, Masahiro Yamada wrote:
> On Tue, May 27, 2025 at 6:08 PM Alexey Gladkov <legion@kernel.org> wrote:
> >
> > In order to avoid symbol conflicts if they appear in the same binary, a
> > more unique alias identifier can be generated.
> 
> Why must this be unique?
> 
> What problem would happen if the same symbol names
> appear in MODULE_DEVICE_TABLE()?

Before these patches this was not a problem as non-unique characters are
in separate object files when the module is compiled separately.

But when the modules are compiled into the kernel, there is a symbol
conflict when linking vmlinuz. We have modules that export multiple device
tables from different object files.

> 
> >
> > Signed-off-by: Alexey Gladkov <legion@kernel.org>
> > Reviewed-by: Petr Pavlu <petr.pavlu@suse.com>
> > ---
> >  include/linux/module.h   | 14 ++++++++++++--
> >  scripts/mod/file2alias.c | 18 ++++++++++++++----
> >  2 files changed, 26 insertions(+), 6 deletions(-)
> >
> > diff --git a/include/linux/module.h b/include/linux/module.h
> > index 88048561360f..e7506684069d 100644
> > --- a/include/linux/module.h
> > +++ b/include/linux/module.h
> > @@ -249,10 +249,20 @@ struct module_kobject *lookup_or_create_module_kobject(const char *name);
> >  /* What your module does. */
> >  #define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description)
> >
> > +/* Format: __mod_device_table__<counter>__kmod_<modname>__<type>__<name> */
> > +#define __mod_device_table(type, name) \
> > +       __PASTE(__mod_device_table__,   \
> > +       __PASTE(__COUNTER__,            \
> > +       __PASTE(__,                     \
> > +       __PASTE(__KBUILD_MODNAME,       \
> > +       __PASTE(__,                     \
> > +       __PASTE(type,                   \
> > +       __PASTE(__, name)))))))
> > +
> >  #ifdef MODULE
> >  /* Creates an alias so file2alias.c can find device table. */
> > -#define MODULE_DEVICE_TABLE(type, name)                                        \
> > -extern typeof(name) __mod_device_table__##type##__##name               \
> > +#define MODULE_DEVICE_TABLE(type, name)                        \
> > +extern typeof(name) __mod_device_table(type, name)     \
> >    __attribute__ ((unused, alias(__stringify(name))))
> >  #else  /* !MODULE */
> >  #define MODULE_DEVICE_TABLE(type, name)
> > diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
> > index 00586119a25b..dff1799a4c79 100644
> > --- a/scripts/mod/file2alias.c
> > +++ b/scripts/mod/file2alias.c
> > @@ -1476,8 +1476,8 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
> >  {
> >         void *symval;
> >         char *zeros = NULL;
> > -       const char *type, *name;
> > -       size_t typelen;
> > +       const char *type, *name, *modname;
> > +       size_t typelen, modnamelen;
> >         static const char *prefix = "__mod_device_table__";
> >
> >         /* We're looking for a section relative symbol */
> > @@ -1488,10 +1488,20 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
> >         if (ELF_ST_TYPE(sym->st_info) != STT_OBJECT)
> >                 return;
> >
> > -       /* All our symbols are of form __mod_device_table__<type>__<name>. */
> > +       /* All our symbols are of form __mod_device_table__<counter>__kmod_<modname>__<type>__<name>. */
> >         if (!strstarts(symname, prefix))
> >                 return;
> > -       type = symname + strlen(prefix);
> > +
> > +       modname = strstr(symname, "__kmod_");
> > +       if (!modname)
> > +               return;
> > +       modname += strlen("__kmod_");
> > +
> > +       type = strstr(modname, "__");
> > +       if (!type)
> > +               return;
> > +       modnamelen = type - modname;
> > +       type += strlen("__");
> >
> >         name = strstr(type, "__");
> >         if (!name)
> > --
> > 2.49.0
> >
> 
> 
> -- 
> Best Regards
> Masahiro Yamada
> 

-- 
Rgrds, legion


  reply	other threads:[~2025-06-02  8:07 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-27  9:07 [PATCH v3 0/6] Add generated modalias to modules.builtin.modinfo Alexey Gladkov
2025-05-27  9:07 ` [PATCH v3 1/6] scsi: Define MODULE_DEVICE_TABLE only if necessary Alexey Gladkov
2025-05-27 11:28   ` James Bottomley
2025-05-27 11:54     ` Alexey Gladkov
2025-05-27 11:58       ` James Bottomley
2025-05-27 12:58         ` Alexey Gladkov
2025-05-27 14:06   ` [PATCH v4 1/6] scsi: Always define blogic_pci_tbl structure Alexey Gladkov
2025-05-27  9:07 ` [PATCH v3 2/6] modules: Add macros to specify modinfo prefix Alexey Gladkov
2025-06-02  7:49   ` Masahiro Yamada
2025-06-09  9:37     ` Alexey Gladkov
2025-05-27  9:07 ` [PATCH v3 3/6] modpost: Make mod_device_table aliases more unique Alexey Gladkov
2025-06-02  7:45   ` Masahiro Yamada
2025-06-02  8:06     ` Alexey Gladkov [this message]
2025-06-02 10:58       ` Masahiro Yamada
2025-06-02 14:03         ` Alexey Gladkov
2025-06-02 16:18           ` Masahiro Yamada
2025-06-02 17:09             ` Alexey Gladkov
2025-06-04 11:26             ` Alexey Gladkov
2025-06-06  5:10               ` Masahiro Yamada
2025-06-06 11:20                 ` Masahiro Yamada
2025-06-02  7:52   ` Masahiro Yamada
2025-06-02  8:24     ` Alexey Gladkov
2025-06-02 18:00       ` Masahiro Yamada
2025-06-02 18:44         ` Alexey Gladkov
2025-06-06  5:12           ` Masahiro Yamada
2025-05-27  9:07 ` [PATCH v3 4/6] modpost: Create modalias for builtin modules Alexey Gladkov
2025-05-27  9:07 ` [PATCH v3 5/6] kbuild: Move modules.builtin.modinfo to another makefile Alexey Gladkov
2025-05-28 13:21   ` kernel test robot
2025-05-28 15:20     ` Alexey Gladkov
2025-05-27  9:08 ` [PATCH v3 6/6] kbuild: Create modules.builtin.modinfo for modpost results Alexey Gladkov
2025-05-27 13:15 ` [PATCH v3 7/6] scsi: Always define MODULE_DEVICE_TABLE Alexey Gladkov
2025-05-27 13:22   ` James Bottomley
2025-05-27 13:44     ` Alexey Gladkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aD1bozP0l67f_wbs@example.org \
    --to=legion@kernel.org \
    --cc=da.gomez@samsung.com \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-modules@vger.kernel.org \
    --cc=masahiroy@kernel.org \
    --cc=mcgrof@kernel.org \
    --cc=nathan@kernel.org \
    --cc=nicolas.schier@linux.dev \
    --cc=petr.pavlu@suse.com \
    --cc=samitolvanen@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.