aboutsummaryrefslogtreecommitdiff
path: root/modutils
diff options
context:
space:
mode:
Diffstat (limited to 'modutils')
-rw-r--r--modutils/modprobe-small.c8
-rw-r--r--modutils/modprobe.c11
-rw-r--r--modutils/modutils.c8
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)
149static char *filename2modname(const char *filename, char *modname) 149static 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)
48char* FAST_FUNC filename2modname(const char *filename, char *modname) 48char* 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';