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: Martijn Coenen <maco@android.com> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Matthias Maennich <maennich@google.com> Signed-off-by: Jessica Yu <jeyu@kernel.org>
This commit is contained in:
parent
cb9b55d21f
commit
3d52ec5e5d
13
init/Kconfig
13
init/Kconfig
|
@ -2119,6 +2119,19 @@ config MODULE_COMPRESS_XZ
|
||||||
|
|
||||||
endchoice
|
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
|
config TRIM_UNUSED_KSYMS
|
||||||
bool "Trim unused exported kernel symbols"
|
bool "Trim unused exported kernel symbols"
|
||||||
depends on MODULES && !UNUSED_SYMBOLS
|
depends on MODULES && !UNUSED_SYMBOLS
|
||||||
|
|
|
@ -1408,9 +1408,16 @@ static int verify_namespace_is_imported(const struct load_info *info,
|
||||||
imported_namespace = get_next_modinfo(
|
imported_namespace = get_next_modinfo(
|
||||||
info, "import_ns", imported_namespace);
|
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
|
||||||
mod->name, kernel_symbol_name(sym), namespace);
|
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;
|
return -EINVAL;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue