modprobe: revert checking for /, stop doing basename() on modprobe args
authorDenys Vlasenko <vda.linux@googlemail.com>
Thu, 1 Jan 2015 18:02:40 +0000 (19:02 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 1 Jan 2015 18:02:40 +0000 (19:02 +0100)
function                                             old     new   delta
process_module                                       726     719      -7
filename2modname                                      81      67     -14
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-21)             Total: -21 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
modutils/modprobe-small.c
modutils/modprobe.c
modutils/modutils.c

index b7990bff15e787abfcc5e26973cecbc60155fdae..dafe91ed740ef1221e4a25a55c4434639d4cef55 100644 (file)
@@ -149,9 +149,13 @@ static void replace(char *s, char what, char with)
 static char *filename2modname(const char *filename, char *modname)
 {
        int i;
-       char *from;
+       const char *from;
 
-       from = bb_get_last_path_component_nostrip(filename);
+       // Disabled since otherwise "modprobe dir/name" would work
+       // as if it is "modprobe name". It is unclear why
+       // 'basenamization' was here in the first place.
+       //from = bb_get_last_path_component_nostrip(filename);
+       from = filename;
        for (i = 0; i < (MODULE_NAME_LEN-1) && from[i] != '\0' && from[i] != '.'; i++)
                modname[i] = (from[i] == '-') ? '_' : from[i];
        modname[i] = '\0';
index f0904285b2e8162b3033923e222eea296c784c1a..f08f0850d6543f1f83074cf7f8f55b076e17a78b 100644 (file)
@@ -238,17 +238,6 @@ static void add_probe(const char *name)
 {
        struct module_entry *m;
 
-       /*
-        * get_or_add_modentry() strips path from name and works
-        * on remaining basename.
-        * This would make "rmmod dir/name" and "modprobe dir/name"
-        * to work like "rmmod name" and "modprobe name",
-        * which is wrong, and can be abused via implicit modprobing:
-        * "ifconfig /usbserial up" tries to modprobe netdev-/usbserial.
-        */
-       if (strchr(name, '/'))
-               bb_error_msg_and_die("malformed module name '%s'", name);
-
        m = get_or_add_modentry(name);
        if (!(option_mask32 & (OPT_REMOVE | OPT_SHOW_DEPS))
         && (m->flags & MODULE_FLAG_LOADED)
index 6187ca72fd3835fa28a18158205a5856913cfd75..ff79d3fac9c80f17fe9abf8255e37852c651eb63 100644 (file)
@@ -48,13 +48,17 @@ int FAST_FUNC string_to_llist(char *string, llist_t **llist, const char *delim)
 char* FAST_FUNC filename2modname(const char *filename, char *modname)
 {
        int i;
-       char *from;
+       const char *from;
 
        if (filename == NULL)
                return NULL;
        if (modname == NULL)
                modname = xmalloc(MODULE_NAME_LEN);
-       from = bb_get_last_path_component_nostrip(filename);
+       // Disabled since otherwise "modprobe dir/name" would work
+       // as if it is "modprobe name". It is unclear why
+       // 'basenamization' was here in the first place.
+       //from = bb_get_last_path_component_nostrip(filename);
+       from = filename;
        for (i = 0; i < (MODULE_NAME_LEN-1) && from[i] != '\0' && from[i] != '.'; i++)
                modname[i] = (from[i] == '-') ? '_' : from[i];
        modname[i] = '\0';