]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
modinfo: use kmod_module_get_initstate() for is_builtin
authorEmil Velikov <emil.l.velikov@gmail.com>
Sat, 18 Jul 2026 20:26:03 +0000 (21:26 +0100)
committerLucas De Marchi <demarchi@kernel.org>
Thu, 6 Aug 2026 01:35:44 +0000 (20:35 -0500)
Currently we assume that the module is built-in if
kmod_module_get_path() returns NULL... Which isn't quite true, since it
can fail for a range of reasons.

Use kmod_module_get_initstate() instead, which will incur in an extra
open("/sys/module/.../initstate") + read() for non built-in modules.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/451
Signed-off-by: Lucas De Marchi <demarchi@kernel.org>
tools/modinfo.c

index 55e97da3c7b6e209d9480baf8e1d8b380f88a729..2457fd2a0a768b61d3ec7c03ffa911a70ca57f45 100644 (file)
@@ -157,19 +157,18 @@ end:
 
 static int modinfo_do(struct kmod_module *mod)
 {
+       const enum kmod_module_initstate state = kmod_module_get_initstate(mod);
+       const bool is_builtin = state == KMOD_MODULE_BUILTIN;
+       const char *filename = is_builtin ? "(builtin)" : kmod_module_get_path(mod);
        struct kmod_list *l, *list = NULL;
        struct param *params = NULL;
-       int err, is_builtin;
-       const char *filename = kmod_module_get_path(mod);
-
-       is_builtin = (filename == NULL);
+       int err;
 
        if (is_builtin) {
                if (field == NULL)
                        printf("%-16s%s%c", "name:", kmod_module_get_name(mod), separator);
                else if (field != NULL && streq(field, "name"))
                        printf("%s%c", kmod_module_get_name(mod), separator);
-               filename = "(builtin)";
        }
 
        if (field != NULL && streq(field, "filename")) {