]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
libkmod-module: probe: fix infinite loop with softdeps
authorLucas De Marchi <lucas.demarchi@profusion.mobi>
Sat, 11 Feb 2012 21:45:29 +0000 (19:45 -0200)
committerLucas De Marchi <lucas.demarchi@profusion.mobi>
Sat, 11 Feb 2012 21:50:00 +0000 (19:50 -0200)
If a softdep depends on a module in the dependency list of the module
being inserted, we would enter and infinite loop.

Move the "mod->visited = true" assignment to the proper place, hoping it
didn't break other use cases. This is a bug that comes and goes every
now and then. Since we have a testsuite now, a test for this should be
written.

libkmod/libkmod-module.c

index b5eb7c98deea323dc384e7b47c574897cacf9f01..835896f6c5348f09adb465701836b02fd00c6729 100644 (file)
@@ -1013,7 +1013,6 @@ static int __kmod_module_fill_softdep(struct kmod_module *mod,
                goto fail;
        }
        *list = l;
-       mod->visited = true;
        mod->ignorecmd = (pre != NULL || post != NULL);
 
        kmod_list_foreach(l, post) {
@@ -1043,6 +1042,7 @@ static int __kmod_module_get_probe_list(struct kmod_module *mod,
                                                                mod->name);
                return 0;
        }
+       mod->visited = true;
 
        dep = kmod_module_get_dependencies(mod);
        kmod_list_foreach(l, dep) {