diff options
author | Denys Vlasenko | 2015-01-01 19:02:40 +0100 |
---|---|---|
committer | Denys Vlasenko | 2015-01-01 19:02:40 +0100 |
commit | 78854520ebecfd24d5c80a266d6779bd1e069016 (patch) | |
tree | 43b2a405b44b07348a26312488513ad1aa171361 /modutils | |
parent | 6c19d35f689c911b83073ab1faeffb8040c4b3d9 (diff) | |
download | busybox-78854520ebecfd24d5c80a266d6779bd1e069016.zip busybox-78854520ebecfd24d5c80a266d6779bd1e069016.tar.gz |
modprobe: revert checking for /, stop doing basename() on modprobe args
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>
Diffstat (limited to 'modutils')
-rw-r--r-- | modutils/modprobe-small.c | 8 | ||||
-rw-r--r-- | modutils/modprobe.c | 11 | ||||
-rw-r--r-- | modutils/modutils.c | 8 |
3 files changed, 12 insertions, 15 deletions
diff --git a/modutils/modprobe-small.c b/modutils/modprobe-small.c index b7990bf..dafe91e 100644 --- a/modutils/modprobe-small.c +++ b/modutils/modprobe-small.c @@ -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'; diff --git a/modutils/modprobe.c b/modutils/modprobe.c index f090428..f08f085 100644 --- a/modutils/modprobe.c +++ b/modutils/modprobe.c @@ -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) diff --git a/modutils/modutils.c b/modutils/modutils.c index 6187ca7..ff79d3f 100644 --- a/modutils/modutils.c +++ b/modutils/modutils.c @@ -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'; |