Messages in this thread Patch in this message | | | From | Jessica Yu <> | Subject | [PATCH] module: expose load_info to arch module loader code | Date | Mon, 6 Apr 2020 18:04:20 +0200 |
| |
The x86 module loader wants to check the value of a modinfo flag (sld_safe), before proceeding to scan the module text for VMX instructions. Unfortunately the arch module code currently does not have access to load_info, but we can easily expose that via moduleloader.h, which every arch module code must already include.
Signed-off-by: Jessica Yu <jeyu@kernel.org> ---
Does this help? You may also need to implement a new arch-specific hook in check_modinfo() to check for sld_safe, and I guess we might need to expose get_modinfo() too. I realize that the detect-VMX-modules patchset [1] is still very much in-flight, so if you do end up needing this, feel free to just add this patch to the patchset.
[1] http://lore.kernel.org/r/20200402123258.895628824@linutronix.de
include/linux/moduleloader.h | 20 ++++++++++++++++++++ kernel/module-internal.h | 23 ----------------------- kernel/module_signing.c | 2 +- 3 files changed, 21 insertions(+), 24 deletions(-)
diff --git a/include/linux/moduleloader.h b/include/linux/moduleloader.h index ca92aea8a6bd..2ca0bb783d1e 100644 --- a/include/linux/moduleloader.h +++ b/include/linux/moduleloader.h @@ -6,6 +6,26 @@ #include <linux/module.h> #include <linux/elf.h> +struct load_info { + const char *name; + /* pointer to module in temporary copy, freed at end of load_module() */ + struct module *mod; + Elf_Ehdr *hdr; + unsigned long len; + Elf_Shdr *sechdrs; + char *secstrings, *strtab; + unsigned long symoffs, stroffs, init_typeoffs, core_typeoffs; + struct _ddebug *debug; + unsigned int num_debug; + bool sig_ok; +#ifdef CONFIG_KALLSYMS + unsigned long mod_kallsyms_init_off; +#endif + struct { + unsigned int sym, str, mod, vers, info, pcpu; + } index; +}; + /* These may be implemented by architectures that need to hook into the * module loader code. Architectures that don't need to do anything special * can just rely on the 'weak' default hooks defined in kernel/module.c. diff --git a/kernel/module-internal.h b/kernel/module-internal.h index 33783abc377b..98a873691f1b 100644 --- a/kernel/module-internal.h +++ b/kernel/module-internal.h @@ -5,27 +5,4 @@ * Written by David Howells (dhowells@redhat.com) */ -#include <linux/elf.h> -#include <asm/module.h> - -struct load_info { - const char *name; - /* pointer to module in temporary copy, freed at end of load_module() */ - struct module *mod; - Elf_Ehdr *hdr; - unsigned long len; - Elf_Shdr *sechdrs; - char *secstrings, *strtab; - unsigned long symoffs, stroffs, init_typeoffs, core_typeoffs; - struct _ddebug *debug; - unsigned int num_debug; - bool sig_ok; -#ifdef CONFIG_KALLSYMS - unsigned long mod_kallsyms_init_off; -#endif - struct { - unsigned int sym, str, mod, vers, info, pcpu; - } index; -}; - extern int mod_verify_sig(const void *mod, struct load_info *info); diff --git a/kernel/module_signing.c b/kernel/module_signing.c index 9d9fc678c91d..2de41a3ab8a8 100644 --- a/kernel/module_signing.c +++ b/kernel/module_signing.c @@ -8,11 +8,11 @@ #include <linux/kernel.h> #include <linux/errno.h> #include <linux/module.h> +#include <linux/moduleloader.h> #include <linux/module_signature.h> #include <linux/string.h> #include <linux/verification.h> #include <crypto/public_key.h> -#include "module-internal.h" /* * Verify the signature on a module. -- 2.16.4
| |