Re: [PATCH v2] kbuild: check uniqueness of module names

From: Lucas De Marchi
Date: Fri May 17 2019 - 01:51:55 EST


On Thu, May 16, 2019 at 10:37 PM Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx> wrote:
>
> On Fri, May 17, 2019 at 01:45:11PM +0900, Masahiro Yamada wrote:
> > On Fri, May 17, 2019 at 1:29 PM Masahiro Yamada
> > <yamada.masahiro@xxxxxxxxxxxxx> wrote:
> > >
> > > In the recent build test of linux-next, Stephen saw a build error
> > > caused by a broken .tmp_versions/*.mod file:
> > >
> > > https://lkml.org/lkml/2019/5/13/991
> > >
> > > drivers/net/phy/asix.ko and drivers/net/usb/asix.ko have the same
> > > basename, and there is a race in generating .tmp_versions/asix.mod
> > >
> > > Kbuild has not checked this before, and it suddenly shows up with
> > > obscure error message when this kind of race occurs.
> > >
> > > Non-unique module names cause various sort of problems, but it is
> > > not trivial to catch them by eyes.
> > >
> > > Hence, this script.
> > >
> > > It checks not only real modules, but also built-in modules (i.e.
> > > controlled by tristate CONFIG option, but currently compiled with =y).
> > > Non-unique names for built-in modules also cause problems because
> > > /sys/modules/ would fall over.
> > >
> > > I tested allmodconfig on the latest kernel, and it detected the
> > > following:
> > >
> > > warning: same basename if the following are built as modules:
> > > drivers/regulator/88pm800.ko
> > > drivers/mfd/88pm800.ko
> > > warning: same basename if the following are built as modules:
> > > drivers/gpu/drm/bridge/adv7511/adv7511.ko
> > > drivers/media/i2c/adv7511.ko
> > > warning: same basename if the following are built as modules:
> > > drivers/net/phy/asix.ko
> > > drivers/net/usb/asix.ko
> > > warning: same basename if the following are built as modules:
> > > fs/coda/coda.ko
> > > drivers/media/platform/coda/coda.ko
> > > warning: same basename if the following are built as modules:
> > > drivers/net/phy/realtek.ko
> > > drivers/net/dsa/realtek.ko
> > >
> > > Reported-by: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>
> > > Signed-off-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>
> > > Reviewed-by: Kees Cook <keescook@xxxxxxxxxxxx>
> > > ---
> >
> >
> > One more question popped up.
> >
> > External modules are out of scope of the community,
> > but it is possible that people create an external module
> > that happens to have the same name as an upstream driver.
>
> That is their bug, nothing we can do about that :)

It's actually not a bug. For external modules it works pretty much as
intended. See DEPMOD.D(5): the search directive tells what's the
preference among the directories for modules with the same name.
depmod respects that order and put the right one into your
modules.dep.

This allows to put external modules in a different dir and also to
make backports of modules from recent to ancient kernels. These
modules with the same name are usually the same module, with a
different version. Of course what we have here and you are fixing is a
different story.

Reviewed-by: Lucas De Marchi <lucas.demarchi@xxxxxxxxx>


Lucas De Marchi