Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3d52ec5e authored by Matthias Maennich's avatar Matthias Maennich Committed by Jessica Yu
Browse files

module: add config option MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS



If MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is enabled (default=n), the
requirement for modules to import all namespaces that are used by
the module is relaxed.

Enabling this option effectively allows (invalid) modules to be loaded
while only a warning is emitted.

Disabling this option keeps the enforcement at module loading time and
loading is denied if the module's imports are not satisfactory.

Reviewed-by: default avatarMartijn Coenen <maco@android.com>
Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarMatthias Maennich <maennich@google.com>
Signed-off-by: default avatarJessica Yu <jeyu@kernel.org>
parent cb9b55d2
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -2119,6 +2119,19 @@ config MODULE_COMPRESS_XZ

endchoice

config MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS
	bool "Allow loading of modules with missing namespace imports"
	help
	  Symbols exported with EXPORT_SYMBOL_NS*() are considered exported in
	  a namespace. A module that makes use of a symbol exported with such a
	  namespace is required to import the namespace via MODULE_IMPORT_NS().
	  There is no technical reason to enforce correct namespace imports,
	  but it creates consistency between symbols defining namespaces and
	  users importing namespaces they make use of. This option relaxes this
	  requirement and lifts the enforcement when loading a module.

	  If unsure, say N.

config TRIM_UNUSED_KSYMS
	bool "Trim unused exported kernel symbols"
	depends on MODULES && !UNUSED_SYMBOLS
+9 −2
Original line number Diff line number Diff line
@@ -1408,9 +1408,16 @@ static int verify_namespace_is_imported(const struct load_info *info,
			imported_namespace = get_next_modinfo(
				info, "import_ns", imported_namespace);
		}
		pr_err("%s: module uses symbol (%s) from namespace %s, but does not import it.\n",
#ifdef CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS
		pr_warn(
#else
		pr_err(
#endif
			"%s: module uses symbol (%s) from namespace %s, but does not import it.\n",
			mod->name, kernel_symbol_name(sym), namespace);
#ifndef CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS
		return -EINVAL;
#endif
	}
	return 0;
}