Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

module: export module signature enforcement status

A static variable sig_enforce is used as status var to indicate the real
value of CONFIG_MODULE_SIG_FORCE, once this one is set the var will hold
true, but if the CONFIG is not set the status var will hold whatever
value is present in the module.sig_enforce kernel cmdline param: true
when =1 and false when =0 or not present.

Considering this cmdline param take place over the CONFIG value when
it's not set, other places in the kernel could misbehave since they
would have only the CONFIG_MODULE_SIG_FORCE value to rely on. Exporting
this status var allows the kernel to rely in the effective value of
module signature enforcement, being it from CONFIG value or cmdline
param.

Signed-off-by: Bruno E. O. Meneguele <brdeoliv@redhat.com>
Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com>

authored by

Bruno E. O. Meneguele and committed by
Mimi Zohar
fda784e5 ebe7c0a7

+17
+7
include/linux/module.h
··· 639 639 } 640 640 #endif /* CONFIG_LIVEPATCH */ 641 641 642 + bool is_module_sig_enforced(void); 643 + 642 644 #else /* !CONFIG_MODULES... */ 643 645 644 646 static inline struct module *__module_address(unsigned long addr) ··· 751 749 } 752 750 753 751 static inline bool module_requested_async_probing(struct module *module) 752 + { 753 + return false; 754 + } 755 + 756 + static inline bool is_module_sig_enforced(void) 754 757 { 755 758 return false; 756 759 }
+10
kernel/module.c
··· 278 278 module_param(sig_enforce, bool_enable_only, 0644); 279 279 #endif /* !CONFIG_MODULE_SIG_FORCE */ 280 280 281 + /* 282 + * Export sig_enforce kernel cmdline parameter to allow other subsystems rely 283 + * on that instead of directly to CONFIG_MODULE_SIG_FORCE config. 284 + */ 285 + bool is_module_sig_enforced(void) 286 + { 287 + return sig_enforce; 288 + } 289 + EXPORT_SYMBOL(is_module_sig_enforced); 290 + 281 291 /* Block module loading/unloading? */ 282 292 int modules_disabled = 0; 283 293 core_param(nomodule, modules_disabled, bint, 0);