summaryrefslogtreecommitdiff
path: root/kernel/module/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/module/main.c')
-rw-r--r--kernel/module/main.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/kernel/module/main.c b/kernel/module/main.c
index 5f06c06df9e1..2bf8c617a901 100644
--- a/kernel/module/main.c
+++ b/kernel/module/main.c
@@ -1144,24 +1144,22 @@ resolve_symbol_wait(struct module *mod,
* CONFIG_STRICT_MODULE_RWX block below because they are needed regardless of
* whether we are strict.
*/
-#ifdef CONFIG_ARCH_HAS_STRICT_MODULE_RWX
void frob_text(const struct module_layout *layout,
int (*set_memory)(unsigned long start, int num_pages))
{
- BUG_ON((unsigned long)layout->base & (PAGE_SIZE-1));
- BUG_ON((unsigned long)layout->text_size & (PAGE_SIZE-1));
set_memory((unsigned long)layout->base,
- layout->text_size >> PAGE_SHIFT);
+ PAGE_ALIGN(layout->text_size) >> PAGE_SHIFT);
}
static void module_enable_x(const struct module *mod)
{
+ if (!PAGE_ALIGNED(mod->core_layout.base) ||
+ !PAGE_ALIGNED(mod->init_layout.base))
+ return;
+
frob_text(&mod->core_layout, set_memory_x);
frob_text(&mod->init_layout, set_memory_x);
}
-#else /* !CONFIG_ARCH_HAS_STRICT_MODULE_RWX */
-static void module_enable_x(const struct module *mod) { }
-#endif /* CONFIG_ARCH_HAS_STRICT_MODULE_RWX */
void __weak module_memfree(void *module_region)
{