Re: [PATCH v2 05/10] module: add config option MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS

From: Greg KH
Date: Tue Aug 13 2019 - 14:17:40 EST


On Tue, Aug 13, 2019 at 01:17:02PM +0100, Matthias Maennich wrote:
> 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@xxxxxxxxxxx>
> Signed-off-by: Matthias Maennich <maennich@xxxxxxxxxx>
> ---
> init/Kconfig | 14 ++++++++++++++
> kernel/module.c | 11 +++++++++--
> 2 files changed, 23 insertions(+), 2 deletions(-)
>
> diff --git a/init/Kconfig b/init/Kconfig
> index bd7d650d4a99..b3373334cdf1 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -2119,6 +2119,20 @@ config MODULE_COMPRESS_XZ
>
> endchoice
>
> +config MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS
> + bool "Allow loading of modules with missing namespace imports"
> + default n

the default for config options is always N, no need to list it here.

> + 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().
> + This option relaxes this requirement when loading a module. While
> + technically there is no reason to enforce correct namespace imports,
> + it creates consistency between symbols defining namespaces and users
> + importing namespaces they make use of.
> +
> + If unsure, say N.
> +
> config TRIM_UNUSED_KSYMS
> bool "Trim unused exported kernel symbols"
> depends on MODULES && !UNUSED_SYMBOLS
> diff --git a/kernel/module.c b/kernel/module.c
> index 57e8253f2251..7c934aaae2d3 100644
> --- a/kernel/module.c
> +++ b/kernel/module.c
> @@ -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",
> - mod->name, kernel_symbol_name(sym), namespace);
> +#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

This #ifdef mess is a hack, but oh well :)

If you drop the above default line, feel free to add:

Reviewed-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>