dbc4a9b
From: Matthew Garrett <matthew.garrett@nebula.com>
dbc4a9b
Date: Fri, 9 Aug 2013 17:58:15 -0400
dbc4a9b
Subject: [PATCH] Add secure_modules() call
dbc4a9b
dbc4a9b
Provide a single call to allow kernel code to determine whether the system
dbc4a9b
has been configured to either disable module loading entirely or to load
dbc4a9b
only modules signed with a trusted key.
dbc4a9b
dbc4a9b
Bugzilla: N/A
dbc4a9b
Upstream-status: Fedora mustard.  Replaced by securelevels, but that was nak'd
dbc4a9b
dbc4a9b
Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
dbc4a9b
---
dbc4a9b
 include/linux/module.h |  7 +++++++
dbc4a9b
 kernel/module.c        | 10 ++++++++++
dbc4a9b
 2 files changed, 17 insertions(+)
dbc4a9b
dbc4a9b
diff --git a/include/linux/module.h b/include/linux/module.h
2f08a80
index b03485bcb82a..b033dab5c8bf 100644
dbc4a9b
--- a/include/linux/module.h
dbc4a9b
+++ b/include/linux/module.h
2f08a80
@@ -506,6 +506,8 @@ int unregister_module_notifier(struct notifier_block *nb);
dbc4a9b
 
dbc4a9b
 extern void print_modules(void);
dbc4a9b
 
dbc4a9b
+extern bool secure_modules(void);
dbc4a9b
+
dbc4a9b
 #else /* !CONFIG_MODULES... */
dbc4a9b
 
dbc4a9b
 /* Given an address, look for it in the exception tables. */
2f08a80
@@ -616,6 +618,11 @@ static inline int unregister_module_notifier(struct notifier_block *nb)
dbc4a9b
 static inline void print_modules(void)
dbc4a9b
 {
dbc4a9b
 }
dbc4a9b
+
dbc4a9b
+static inline bool secure_modules(void)
dbc4a9b
+{
dbc4a9b
+	return false;
dbc4a9b
+}
dbc4a9b
 #endif /* CONFIG_MODULES */
dbc4a9b
 
dbc4a9b
 #ifdef CONFIG_SYSFS
dbc4a9b
diff --git a/kernel/module.c b/kernel/module.c
58a9ff1
index 538794ce3cc7..f3489ef9e409 100644
dbc4a9b
--- a/kernel/module.c
dbc4a9b
+++ b/kernel/module.c
58a9ff1
@@ -3911,3 +3911,13 @@ void module_layout(struct module *mod,
dbc4a9b
 }
dbc4a9b
 EXPORT_SYMBOL(module_layout);
dbc4a9b
 #endif
dbc4a9b
+
dbc4a9b
+bool secure_modules(void)
dbc4a9b
+{
dbc4a9b
+#ifdef CONFIG_MODULE_SIG
dbc4a9b
+	return (sig_enforce || modules_disabled);
dbc4a9b
+#else
dbc4a9b
+	return modules_disabled;
dbc4a9b
+#endif
dbc4a9b
+}
dbc4a9b
+EXPORT_SYMBOL(secure_modules);