diff options
author | Denys Vlasenko | 2015-01-11 17:40:30 +0100 |
---|---|---|
committer | Denys Vlasenko | 2015-01-11 17:40:30 +0100 |
commit | 3c75b1c34e56e89aacacc781a97c70eff37bc63d (patch) | |
tree | 583569360c977c16fa8cbe06ffb9044e64146c4e /modutils/modprobe-small.c | |
parent | 39f017293a047ac1063c84263d4d855b86c62ba1 (diff) | |
download | busybox-3c75b1c34e56e89aacacc781a97c70eff37bc63d.zip busybox-3c75b1c34e56e89aacacc781a97c70eff37bc63d.tar.gz |
modprobe-small: fix recent breakage: modprobe -r was using full path
"modprobe -r MODNAME", after it found the full module pathname,
should strip dirpath before trying to remove the module.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'modutils/modprobe-small.c')
-rw-r--r-- | modutils/modprobe-small.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/modutils/modprobe-small.c b/modutils/modprobe-small.c index dafe91e..cf8a3f0 100644 --- a/modutils/modprobe-small.c +++ b/modutils/modprobe-small.c @@ -635,6 +635,14 @@ static void process_module(char *name, const char *cmdline_options) infovec = find_alias(name); } + if (!infovec) { + /* both dirscan and find_alias found nothing */ + if (!is_rmmod && applet_name[0] != 'd') /* it wasn't rmmod or depmod */ + bb_error_msg("module '%s' not found", name); +//TODO: _and_die()? or should we continue (un)loading modules listed on cmdline? + goto ret; + } + /* There can be more than one module for the given alias. For example, * "pci:v00008086d00007010sv00000000sd00000000bc01sc01i80" matches * ata_piix because it has alias "pci:v00008086d00007010sv*sd*bc*sc*i*" @@ -650,7 +658,8 @@ static void process_module(char *name, const char *cmdline_options) int r; char modname[MODULE_NAME_LEN]; - filename2modname(info->pathname, modname); + filename2modname( + bb_get_last_path_component_nostrip(info->pathname), modname); r = delete_module(modname, O_NONBLOCK | O_EXCL); dbg1_error_msg("delete_module('%s', O_NONBLOCK | O_EXCL):%d", modname, r); if (r != 0) { @@ -673,14 +682,6 @@ static void process_module(char *name, const char *cmdline_options) */ } - if (!infovec) { - /* both dirscan and find_alias found nothing */ - if (!is_rmmod && applet_name[0] != 'd') /* it wasn't rmmod or depmod */ - bb_error_msg("module '%s' not found", name); -//TODO: _and_die()? or should we continue (un)loading modules listed on cmdline? - goto ret; - } - infoidx = 0; while ((info = infovec[infoidx++]) != NULL) { /* Iterate thru dependencies, trying to (un)load them */ |