From: Lucas De Marchi Date: Mon, 6 Feb 2012 14:52:27 +0000 (-0200) Subject: libkmod-module: probe: return -EEXIST if told to do so X-Git-Tag: v5~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=08600ee579d9be4b54ee5ac56ce13706b3cfecf4;p=thirdparty%2Fkmod.git libkmod-module: probe: return -EEXIST if told to do so Commit "af9572c lib/module: check initstate before inserting module" removed the check for "we should return -EEXIST" and moved it back to the start of the function. The problem with this is the following scenario: - We check if module is in kernel -> no - We insert the dependencies <-- External program loads the module - We check if module is in kernel -> yes - We return 0, when we should return -EEXIST --- diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c index 61cdb4a4..0af3e2ea 100644 --- a/libkmod/libkmod-module.c +++ b/libkmod/libkmod-module.c @@ -1188,9 +1188,8 @@ KMOD_EXPORT int kmod_module_probe_insert_module(struct kmod_module *mod, && module_is_inkernel(m)) { DBG(mod->ctx, "Ignoring module '%s': " "already loaded\n", m->name); - err = 0; - free(options); - continue; + err = -EEXIST; + goto finish_module; } if (print_action != NULL) print_action(m, false, options ?: ""); @@ -1200,6 +1199,7 @@ KMOD_EXPORT int kmod_module_probe_insert_module(struct kmod_module *mod, options); } +finish_module: free(options); /*