summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/module/internal.h6
-rw-r--r--kernel/module/main.c12
2 files changed, 7 insertions, 11 deletions
diff --git a/kernel/module/internal.h b/kernel/module/internal.h
index 3fc139d5074b..972bc811dcd2 100644
--- a/kernel/module/internal.h
+++ b/kernel/module/internal.h
@@ -23,9 +23,9 @@
/*
* Modules' sections will be aligned on page boundaries
* to ensure complete separation of code and data, but
- * only when CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
+ * only when CONFIG_STRICT_MODULE_RWX=y
*/
-#ifdef CONFIG_ARCH_HAS_STRICT_MODULE_RWX
+#ifdef CONFIG_STRICT_MODULE_RWX
# define debug_align(X) PAGE_ALIGN(X)
#else
# define debug_align(X) (X)
@@ -175,10 +175,8 @@ static inline struct module *mod_find(unsigned long addr)
}
#endif /* CONFIG_MODULES_TREE_LOOKUP */
-#ifdef CONFIG_ARCH_HAS_STRICT_MODULE_RWX
void frob_text(const struct module_layout *layout, int (*set_memory)(unsigned long start,
int num_pages));
-#endif /* CONFIG_ARCH_HAS_STRICT_MODULE_RWX */
#ifdef CONFIG_STRICT_MODULE_RWX
void module_enable_ro(const struct module *mod, bool after_init);
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)
{