Messages in this thread Patch in this message | ![/](/images/icornerl.gif) | | From | Jessica Yu <> | Subject | [PATCH] modpost: return error if module is missing ns imports and MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=n | Date | Fri, 14 Feb 2020 15:37:09 +0100 |
| |
Currently when CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=n, modpost only warns when a module is missing namespace imports. Under this configuration, such a module cannot be loaded into the kernel anyway, as the module loader would reject it. We might as well return a build error when a module is missing namespace imports under CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=n, so that the build warning does not go ignored/unnoticed.
Signed-off-by: Jessica Yu <jeyu@kernel.org> --- scripts/Makefile.modpost | 1 + scripts/mod/modpost.c | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost index b4d3f2d122ac..a53660f910a9 100644 --- a/scripts/Makefile.modpost +++ b/scripts/Makefile.modpost @@ -53,6 +53,7 @@ MODPOST = scripts/mod/modpost \ $(if $(KBUILD_EXTMOD),$(addprefix -e ,$(KBUILD_EXTRA_SYMBOLS))) \ $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \ $(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \ + $(if $(CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS),,-N) \ $(if $(KBUILD_MODPOST_WARN),-w) ifdef MODPOST_VMLINUX diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 7edfdb2f4497..53e966f7d557 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -39,6 +39,8 @@ static int sec_mismatch_count = 0; static int sec_mismatch_fatal = 0; /* ignore missing files */ static int ignore_missing_files; +/* Return an error when there are missing namespace imports */ +static int missing_ns_import_error = 0; enum export { export_plain, export_unused, export_gpl, @@ -2216,9 +2218,15 @@ static int check_exports(struct module *mod) if (exp->namespace && !module_imports_namespace(mod, exp->namespace)) { - warn("module %s uses symbol %s from namespace %s, but does not import it.\n", - basename, exp->name, exp->namespace); - add_namespace(&mod->missing_namespaces, exp->namespace); + if (missing_ns_import_error) { + merror("module %s uses symbol %s from namespace %s, but does not import it.\n", + basename, exp->name, exp->namespace); + err = 1; + } else { + warn("module %s uses symbol %s from namespace %s, but does not import it.\n", + basename, exp->name, exp->namespace); + } + add_namespace(&mod->missing_namespaces, exp->namespace); } if (!mod->gpl_compatible) @@ -2560,7 +2568,7 @@ int main(int argc, char **argv) struct ext_sym_list *extsym_iter; struct ext_sym_list *extsym_start = NULL; - while ((opt = getopt(argc, argv, "i:e:mnsT:o:awEd:")) != -1) { + while ((opt = getopt(argc, argv, "i:e:mnsT:o:awENd:")) != -1) { switch (opt) { case 'i': kernel_read = optarg; @@ -2598,6 +2606,9 @@ int main(int argc, char **argv) case 'E': sec_mismatch_fatal = 1; break; + case 'N': + missing_ns_import_error = 1; + break; case 'd': missing_namespace_deps = optarg; break; -- 2.16.4
| ![\](/images/icornerr.gif) |