summaryrefslogtreecommitdiffstats
path: root/include/linux/module.h
diff options
context:
space:
mode:
authorJessica Yu <jeyu@redhat.com>2016-07-27 12:06:21 +0930
committerRusty Russell <rusty@rustcorp.com.au>2016-08-04 10:16:55 +0930
commit444d13ff10fb13bc3e64859c3cf9ce43dcfeb075 (patch)
treeab35e195fe3daeae0bd87f6f5bd7cc1cf07fd86a /include/linux/module.h
parentbdc9f373551dd3f1e6fae1618f2394ee9bc7db2e (diff)
downloadlinux-444d13ff10fb13bc3e64859c3cf9ce43dcfeb075.tar.gz
linux-444d13ff10fb13bc3e64859c3cf9ce43dcfeb075.tar.bz2
linux-444d13ff10fb13bc3e64859c3cf9ce43dcfeb075.zip
modules: add ro_after_init support
Add ro_after_init support for modules by adding a new page-aligned section in the module layout (after rodata) for ro_after_init data and enabling RO protection for that section after module init runs. Signed-off-by: Jessica Yu <jeyu@redhat.com> Acked-by: Kees Cook <keescook@chromium.org> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'include/linux/module.h')
-rw-r--r--include/linux/module.h6
1 files changed, 4 insertions, 2 deletions
diff --git a/include/linux/module.h b/include/linux/module.h
index f95ed243a4de..0c3207d26ac0 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -298,6 +298,8 @@ struct module_layout {
unsigned int text_size;
/* Size of RO section of the module (text+rodata) */
unsigned int ro_size;
+ /* Size of RO after init section */
+ unsigned int ro_after_init_size;
#ifdef CONFIG_MODULES_TREE_LOOKUP
struct mod_tree_node mtn;
@@ -765,12 +767,12 @@ extern int module_sysfs_initialized;
#ifdef CONFIG_DEBUG_SET_MODULE_RONX
extern void set_all_modules_text_rw(void);
extern void set_all_modules_text_ro(void);
-extern void module_enable_ro(const struct module *mod);
+extern void module_enable_ro(const struct module *mod, bool after_init);
extern void module_disable_ro(const struct module *mod);
#else
static inline void set_all_modules_text_rw(void) { }
static inline void set_all_modules_text_ro(void) { }
-static inline void module_enable_ro(const struct module *mod) { }
+static inline void module_enable_ro(const struct module *mod, bool after_init) { }
static inline void module_disable_ro(const struct module *mod) { }
#endif