Reorganize the code to make it easier to add the new hash-based module
authentication.

Also drop the now unnecessary stub for module_sig_check().

Signed-off-by: Thomas Weißschuh <[email protected]>
---
 kernel/module/auth.c     | 17 ++++++++++++++---
 kernel/module/internal.h |  8 --------
 2 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/kernel/module/auth.c b/kernel/module/auth.c
index 21e49eb4967c..2ee512d26790 100644
--- a/kernel/module/auth.c
+++ b/kernel/module/auth.c
@@ -37,6 +37,14 @@ void set_module_sig_enforced(void)
        sig_enforce = true;
 }
 
+static __always_inline bool mod_sig_type_valid(enum module_signature_type 
id_type)
+{
+       if (id_type == MODULE_SIGNATURE_TYPE_PKCS7 && 
IS_ENABLED(CONFIG_MODULE_SIG))
+               return true;
+
+       return false;
+}
+
 static int mod_verify_sig(const void *mod, struct load_info *info)
 {
        struct module_signature ms;
@@ -48,8 +56,8 @@ static int mod_verify_sig(const void *mod, struct load_info 
*info)
 
        memcpy(&ms, mod + (modlen - sizeof(ms)), sizeof(ms));
 
-       if (ms.id_type != MODULE_SIGNATURE_TYPE_PKCS7) {
-               pr_err("module: not signed with expected PKCS#7 message\n");
+       if (!mod_sig_type_valid(ms.id_type)) {
+               pr_err("module: not signed with expected signature\n");
                return -ENOPKG;
        }
 
@@ -61,7 +69,10 @@ static int mod_verify_sig(const void *mod, struct load_info 
*info)
        modlen -= sig_len + sizeof(ms);
        info->len = modlen;
 
-       return module_sig_check(mod, modlen, mod + modlen, sig_len);
+       if (ms.id_type == MODULE_SIGNATURE_TYPE_PKCS7 && 
IS_ENABLED(CONFIG_MODULE_SIG))
+               return module_sig_check(mod, modlen, mod + modlen, sig_len);
+
+       return 0;
 }
 
 int module_auth_check(struct load_info *info, int flags)
diff --git a/kernel/module/internal.h b/kernel/module/internal.h
index d923e31a5d8e..aabe7f8e1af4 100644
--- a/kernel/module/internal.h
+++ b/kernel/module/internal.h
@@ -335,15 +335,7 @@ int module_enforce_rwx_sections(const Elf_Ehdr *hdr, const 
Elf_Shdr *sechdrs,
 void module_mark_ro_after_init(const Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
                               const char *secstrings);
 
-#ifdef CONFIG_MODULE_SIG
 int module_sig_check(const void *mod, size_t mod_len, const void *sig, size_t 
sig_len);
-#else /* !CONFIG_MODULE_SIG */
-static inline int module_sig_check(const void *mod, size_t mod_len,
-                                  const void *sig, size_t sig_len)
-{
-       return 0;
-}
-#endif /* !CONFIG_MODULE_SIG */
 
 #ifdef CONFIG_MODULE_AUTH
 int module_auth_check(struct load_info *info, int flags);

-- 
2.54.0


Reply via email to