According to manual page for modprobe.conf(5), only canned aliases taken from kernel modules are blacklisted:
Modules can contain their own aliases: usually these are aliases
describing the devices they support, such as "pci:123...". These
"internal" aliases can be overridden by normal "alias" keywords,
but there are cases where two or more modules both support the
same devices, or a module invalidly claims to support a device
that it does not: the blacklist keyword indicates that all of
that particular module's internal aliases are to be ignored.
But as written now, modprobe applies blacklist to all modules, both read
from configuration files as well as from modules.alias.
Should not it actually do as in the attached patch? This patch is from
Mandriva package adapted to current version; second apply_blacklist is
to make sure alias ordering is the same for all cases.
Subject: [PATCH] Do not blacklist aliases read from configuration files From: Andrey Borzenkov <[email protected]> Modprobe.conf manual states that blacklist keyword blacklists only canned aliases. Currently blacklist is applied to all aliases, both from configuration files as well as kernel modules.alias. Make sure only latter are blacklisted. Signed-off-by: Andrey Borzenkov <[email protected]> --- modprobe.c | 60 ++++++++++++++++++++++++++++++++---------------------------- 1 files changed, 32 insertions(+), 28 deletions(-) diff --git a/modprobe.c b/modprobe.c index 26a7163..ef463b3 100644 --- a/modprobe.c +++ b/modprobe.c @@ -1594,39 +1594,43 @@ int do_modprobe(const char *modname, matching_aliases = find_aliases(conf->aliases, modname); /* No luck? Try symbol names, if starts with symbol:. */ - if (!matching_aliases && strstarts(modname, "symbol:")) { - char *symfilename; - - nofail_asprintf(&symfilename, "%s/modules.symbols", dirname); - read_aliases(symfilename, modname, 0, &matching_aliases); - free(symfilename); - } if (!matching_aliases) { - if(!strchr(modname, ':')) - read_depends(dirname, modname, &list); + if (strstarts(modname, "symbol:")) { + char *symfilename; - /* We only use canned aliases as last resort. */ - if (list_empty(&list) - && !find_softdep(modname, conf->softdeps) - && !find_command(modname, conf->commands)) - { - char *aliasfilename; - - nofail_asprintf(&aliasfilename, "%s/modules.alias", - dirname); - read_aliases(aliasfilename, modname, 0, - &matching_aliases); - free(aliasfilename); - /* builtin module? */ - if (!matching_aliases && module_builtin(dirname, modname) > 0) { - failed |= handle_builtin_module(modname, error, - flags); - goto out; + nofail_asprintf(&symfilename, "%s/modules.symbols", dirname); + read_aliases(symfilename, modname, 0, &matching_aliases); + free(symfilename); + } + if (!matching_aliases) { + if(!strchr(modname, ':')) + read_depends(dirname, modname, &list); + + /* We only use canned aliases as last resort. */ + if (list_empty(&list) + && !find_softdep(modname, conf->softdeps) + && !find_command(modname, conf->commands)) + { + char *aliasfilename; + + nofail_asprintf(&aliasfilename, "%s/modules.alias", + dirname); + read_aliases(aliasfilename, modname, 0, + &matching_aliases); + free(aliasfilename); + /* builtin module? */ + if (!matching_aliases && module_builtin(dirname, modname) > 0) { + failed |= handle_builtin_module(modname, error, + flags); + goto out; + } } } - } - apply_blacklist(&matching_aliases, conf->blacklist); + apply_blacklist(&matching_aliases, conf->blacklist); + } else + apply_blacklist(&matching_aliases, NULL); /* Reverses the list */ + if(flags & mit_resolve_alias) { struct module_alias *aliases = matching_aliases;
signature.asc
Description: This is a digitally signed message part.
