summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Tomlin <atomlin@redhat.com>2016-10-27 10:36:06 +0100
committerJessica Yu <jeyu@redhat.com>2016-11-26 11:18:03 -0800
commit905dd707fc856bae57de144dcf873583881f9489 (patch)
tree44b86285a362094c40916410c761f4778f8c30e3
parent885a78d4a5b3ad2d7c41d1819b001d7957f442cd (diff)
downloadlinux-stable-905dd707fc856bae57de144dcf873583881f9489.tar.gz
linux-stable-905dd707fc856bae57de144dcf873583881f9489.tar.bz2
linux-stable-905dd707fc856bae57de144dcf873583881f9489.zip
module: When modifying a module's text ignore modules which are going away too
By default, during the access permission modification of a module's core and init pages, we only ignore modules that are malformed. Albeit for a module which is going away, it does not make sense to change its text to RO since the module should be RW, before deallocation. This patch makes set_all_modules_text_ro() skip modules which are going away too. Signed-off-by: Aaron Tomlin <atomlin@redhat.com> Acked-by: Rusty Russell <rusty@rustcorp.com.au> Link: http://lkml.kernel.org/r/1477560966-781-1-git-send-email-atomlin@redhat.com [jeyu@redhat.com: add comment as suggested by Steven Rostedt] Signed-off-by: Jessica Yu <jeyu@redhat.com>
-rw-r--r--kernel/module.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/module.c b/kernel/module.c
index f082832ad3ad..927a67e30855 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -1958,7 +1958,13 @@ void set_all_modules_text_ro(void)
mutex_lock(&module_mutex);
list_for_each_entry_rcu(mod, &modules, list) {
- if (mod->state == MODULE_STATE_UNFORMED)
+ /*
+ * Ignore going modules since it's possible that ro
+ * protection has already been disabled, otherwise we'll
+ * run into protection faults at module deallocation.
+ */
+ if (mod->state == MODULE_STATE_UNFORMED ||
+ mod->state == MODULE_STATE_GOING)
continue;
frob_text(&mod->core_layout, set_memory_ro);