diff options
author | Jessica Yu <jeyu@redhat.com> | 2016-07-26 22:36:21 -0400 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2016-08-03 20:46:55 -0400 |
commit | 444d13ff10fb13bc3e64859c3cf9ce43dcfeb075 (patch) | |
tree | ab35e195fe3daeae0bd87f6f5bd7cc1cf07fd86a /include/linux/module.h | |
parent | bdc9f373551dd3f1e6fae1618f2394ee9bc7db2e (diff) |
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.h | 6 |
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 { | |||
298 | unsigned int text_size; | 298 | unsigned int text_size; |
299 | /* Size of RO section of the module (text+rodata) */ | 299 | /* Size of RO section of the module (text+rodata) */ |
300 | unsigned int ro_size; | 300 | unsigned int ro_size; |
301 | /* Size of RO after init section */ | ||
302 | unsigned int ro_after_init_size; | ||
301 | 303 | ||
302 | #ifdef CONFIG_MODULES_TREE_LOOKUP | 304 | #ifdef CONFIG_MODULES_TREE_LOOKUP |
303 | struct mod_tree_node mtn; | 305 | struct mod_tree_node mtn; |
@@ -765,12 +767,12 @@ extern int module_sysfs_initialized; | |||
765 | #ifdef CONFIG_DEBUG_SET_MODULE_RONX | 767 | #ifdef CONFIG_DEBUG_SET_MODULE_RONX |
766 | extern void set_all_modules_text_rw(void); | 768 | extern void set_all_modules_text_rw(void); |
767 | extern void set_all_modules_text_ro(void); | 769 | extern void set_all_modules_text_ro(void); |
768 | extern void module_enable_ro(const struct module *mod); | 770 | extern void module_enable_ro(const struct module *mod, bool after_init); |
769 | extern void module_disable_ro(const struct module *mod); | 771 | extern void module_disable_ro(const struct module *mod); |
770 | #else | 772 | #else |
771 | static inline void set_all_modules_text_rw(void) { } | 773 | static inline void set_all_modules_text_rw(void) { } |
772 | static inline void set_all_modules_text_ro(void) { } | 774 | static inline void set_all_modules_text_ro(void) { } |
773 | static inline void module_enable_ro(const struct module *mod) { } | 775 | static inline void module_enable_ro(const struct module *mod, bool after_init) { } |
774 | static inline void module_disable_ro(const struct module *mod) { } | 776 | static inline void module_disable_ro(const struct module *mod) { } |
775 | #endif | 777 | #endif |
776 | 778 | ||