diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2014-11-20 18:24:33 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2014-11-20 18:24:33 +0100 |
commit | 4e314faa0aecb66717418e9a47a4451aec59262b (patch) | |
tree | 2cd9ecfef1a5cb293d97fbdc026b7fd82fed3148 | |
parent | f5add44981b43490376ea0dfed1420dba09a3a75 (diff) | |
download | busybox-w32-4e314faa0aecb66717418e9a47a4451aec59262b.tar.gz busybox-w32-4e314faa0aecb66717418e9a47a4451aec59262b.tar.bz2 busybox-w32-4e314faa0aecb66717418e9a47a4451aec59262b.zip |
modprobe,rmmod: reject module names with slashes
function old new delta
add_probe 86 113 +27
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | modutils/modprobe.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/modutils/modprobe.c b/modutils/modprobe.c index f08f0850d..f0904285b 100644 --- a/modutils/modprobe.c +++ b/modutils/modprobe.c | |||
@@ -238,6 +238,17 @@ 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 | |||
241 | m = get_or_add_modentry(name); | 252 | m = get_or_add_modentry(name); |
242 | if (!(option_mask32 & (OPT_REMOVE | OPT_SHOW_DEPS)) | 253 | if (!(option_mask32 & (OPT_REMOVE | OPT_SHOW_DEPS)) |
243 | && (m->flags & MODULE_FLAG_LOADED) | 254 | && (m->flags & MODULE_FLAG_LOADED) |