← Commit list

76b2262b9

Denys Vlasenko
Denys Vlasenko
2015-01-15
SUCCESS Duration: 142s

Subject

modprobe: fix "modprobe devname:snd/timer" case (alias with a slash)

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

modutils/modprobe.c+9 -4
@@ -207,7 +207,7 @@ static struct module_entry *helper_get_module(const char *module, int create)
unsigned i;
unsigned hash;
- filename2modname(bb_get_last_path_component_nostrip(module), modname);
+ filename2modname(module, modname);
hash = 0;
for (i = 0; modname[i]; i++)
@@ -232,9 +232,14 @@ static ALWAYS_INLINE struct module_entry *get_or_add_modentry(const char *module
{
return helper_get_module(module, 1);
}
-static ALWAYS_INLINE struct module_entry *get_modentry(const char *module)
+/* So far this function always gets a module pathname, never an alias name.
+ * The crucial difference is that pathname needs dirname stripping,
+ * while alias name must NOT do it!
+ * Testcase where dirname stripping is likely to go wrong: "modprobe devname:snd/timer"
+ */
+static ALWAYS_INLINE struct module_entry *get_modentry(const char *pathname)
{
- return helper_get_module(module, 0);
+ return helper_get_module(bb_get_last_path_component_nostrip(pathname), 0);
}
static void add_probe(const char *name)
@@ -502,7 +507,7 @@ static void load_modules_dep(void)
colon = last_char_is(tokens[0], ':');
if (colon == NULL)
continue;
- *colon = 0;
+ *colon = '\0';
m = get_modentry(tokens[0]);
if (m == NULL)