diff options
-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 b7990bff1..dafe91ed7 100644 --- a/modutils/modprobe-small.c +++ b/modutils/modprobe-small.c | |||
@@ -149,9 +149,13 @@ static void replace(char *s, char what, char with) | |||
149 | static char *filename2modname(const char *filename, char *modname) | 149 | static char *filename2modname(const char *filename, char *modname) |
150 | { | 150 | { |
151 | int i; | 151 | int i; |
152 | char *from; | 152 | const char *from; |
153 | 153 | ||
154 | from = bb_get_last_path_component_nostrip(filename); | 154 | // Disabled since otherwise "modprobe dir/name" would work |
155 | // as if it is "modprobe name". It is unclear why | ||
156 | // 'basenamization' was here in the first place. | ||
157 | //from = bb_get_last_path_component_nostrip(filename); | ||
158 | from = filename; | ||
155 | for (i = 0; i < (MODULE_NAME_LEN-1) && from[i] != '\0' && from[i] != '.'; i++) | 159 | for (i = 0; i < (MODULE_NAME_LEN-1) && from[i] != '\0' && from[i] != '.'; i++) |
156 | modname[i] = (from[i] == '-') ? '_' : from[i]; | 160 | modname[i] = (from[i] == '-') ? '_' : from[i]; |
157 | modname[i] = '\0'; | 161 | modname[i] = '\0'; |
diff --git a/modutils/modprobe.c b/modutils/modprobe.c index f0904285b..f08f0850d 100644 --- a/modutils/modprobe.c +++ b/modutils/modprobe.c | |||
@@ -238,17 +238,6 @@ static void add_probe(const char *name) | |||
238 | { | 238 | { |
239 | struct module_entry *m; | 239 | struct module_entry *m; |
240 | 240 | ||
241 | /* | ||
242 | * get_or_add_modentry() strips path from name and works | ||
243 | * on remaining basename. | ||
244 | * This would make "rmmod dir/name" and "modprobe dir/name" | ||
245 | * to work like "rmmod name" and "modprobe name", | ||
246 | * which is wrong, and can be abused via implicit modprobing: | ||
247 | * "ifconfig /usbserial up" tries to modprobe netdev-/usbserial. | ||
248 | */ | ||
249 | if (strchr(name, '/')) | ||
250 | bb_error_msg_and_die("malformed module name '%s'", name); | ||
251 | |||
252 | m = get_or_add_modentry(name); | 241 | m = get_or_add_modentry(name); |
253 | if (!(option_mask32 & (OPT_REMOVE | OPT_SHOW_DEPS)) | 242 | if (!(option_mask32 & (OPT_REMOVE | OPT_SHOW_DEPS)) |
254 | && (m->flags & MODULE_FLAG_LOADED) | 243 | && (m->flags & MODULE_FLAG_LOADED) |
diff --git a/modutils/modutils.c b/modutils/modutils.c index 6187ca72f..ff79d3fac 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) | |||
48 | char* FAST_FUNC filename2modname(const char *filename, char *modname) | 48 | char* FAST_FUNC filename2modname(const char *filename, char *modname) |
49 | { | 49 | { |
50 | int i; | 50 | int i; |
51 | char *from; | 51 | const char *from; |
52 | 52 | ||
53 | if (filename == NULL) | 53 | if (filename == NULL) |
54 | return NULL; | 54 | return NULL; |
55 | if (modname == NULL) | 55 | if (modname == NULL) |
56 | modname = xmalloc(MODULE_NAME_LEN); | 56 | modname = xmalloc(MODULE_NAME_LEN); |
57 | from = bb_get_last_path_component_nostrip(filename); | 57 | // Disabled since otherwise "modprobe dir/name" would work |
58 | // as if it is "modprobe name". It is unclear why | ||
59 | // 'basenamization' was here in the first place. | ||
60 | //from = bb_get_last_path_component_nostrip(filename); | ||
61 | from = filename; | ||
58 | for (i = 0; i < (MODULE_NAME_LEN-1) && from[i] != '\0' && from[i] != '.'; i++) | 62 | for (i = 0; i < (MODULE_NAME_LEN-1) && from[i] != '\0' && from[i] != '.'; i++) |
59 | modname[i] = (from[i] == '-') ? '_' : from[i]; | 63 | modname[i] = (from[i] == '-') ? '_' : from[i]; |
60 | modname[i] = '\0'; | 64 | modname[i] = '\0'; |