]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
modpost: check forbidden MODULE_IMPORT_NS("module:") at compile time
authorMasahiro Yamada <masahiroy@kernel.org>
Thu, 22 May 2025 07:17:20 +0000 (16:17 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Sun, 25 May 2025 09:15:51 +0000 (18:15 +0900)
Explicitly adding MODULE_IMPORT_NS("module:...") is not allowed.

Currently, this is only checked at run time. That is, when such a
module is loaded, an error message like the following is shown:

  foo: module tries to import module namespace: module:bar

Obviously, checking this at compile time improves usability.

In such a case, modpost will report the following error at compile time:

  ERROR: modpost: foo: explicitly importing namespace "module:bar" is not allowed.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
scripts/mod/modpost.c

index 16a69a1298058bb0b239386ef63438dfee04c529..5ca7c268294ebb65acb0ba52a671eddca9279c61 100644 (file)
@@ -28,6 +28,8 @@
 #include "modpost.h"
 #include "../../include/linux/license.h"
 
+#define MODULE_NS_PREFIX "module:"
+
 static bool module_enabled;
 /* Are we using CONFIG_MODVERSIONS? */
 static bool modversions;
@@ -1597,8 +1599,13 @@ static void read_symbols(const char *modname)
 
                for (namespace = get_modinfo(&info, "import_ns");
                     namespace;
-                    namespace = get_next_modinfo(&info, "import_ns", namespace))
+                    namespace = get_next_modinfo(&info, "import_ns", namespace)) {
+                       if (strstarts(namespace, MODULE_NS_PREFIX))
+                               error("%s: explicitly importing namespace \"%s\" is not allowed.\n",
+                                     mod->name, namespace);
+
                        add_namespace(&mod->imported_namespaces, namespace);
+               }
 
                if (!get_modinfo(&info, "description"))
                        warn("missing MODULE_DESCRIPTION() in %s\n", modname);