From: Dave Reisner Date: Thu, 15 Mar 2012 02:15:21 +0000 (-0400) Subject: modprobe: fix error path in removing modules X-Git-Tag: v7~7^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f758caf57c12fcbdad37798717a2a0655a139787;p=thirdparty%2Fkmod.git modprobe: fix error path in removing modules We really haven't paid this code much attention, and it's somewhat evident in our divergence in behavior from module-init-tools. This patch asserts the following behavior on exit: * modprobe -r realmod_notloaded => exit zero * modprobe -r --first-time realmod_notloaded => exit non-zero * modprobe -r bogusmod => exit non-zero --- diff --git a/tools/kmod-modprobe.c b/tools/kmod-modprobe.c index 55f37956..996a9196 100644 --- a/tools/kmod-modprobe.c +++ b/tools/kmod-modprobe.c @@ -412,22 +412,17 @@ static int rmmod_do_module(struct kmod_module *mod, bool do_dependencies) int state = kmod_module_get_initstate(mod); if (state < 0) { - LOG ("Module %s not found.\n", modname); - err = -ENOENT; - goto error; - } else if (state == KMOD_MODULE_BUILTIN) { - LOG("Module %s is builtin.\n", modname); - err = -ENOENT; - goto error; - } else if (state != KMOD_MODULE_LIVE) { if (first_time) { LOG("Module %s is not in kernel.\n", modname); err = -ENOENT; - goto error; } else { err = 0; - goto error; } + goto error; + } else if (state == KMOD_MODULE_BUILTIN) { + LOG("Module %s is builtin.\n", modname); + err = -ENOENT; + goto error; } } @@ -479,8 +474,10 @@ static int rmmod(struct kmod_ctx *ctx, const char *alias) if (err < 0) return err; - if (list == NULL) + if (list == NULL) { LOG("Module %s not found.\n", alias); + err = -ENOENT; + } kmod_list_foreach(l, list) { struct kmod_module *mod = kmod_module_get_module(l);