]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
module: When modifying a module's text ignore modules which are going away too
authorAaron Tomlin <atomlin@redhat.com>
Thu, 27 Oct 2016 09:36:06 +0000 (10:36 +0100)
committerJessica Yu <jeyu@redhat.com>
Sat, 26 Nov 2016 19:18:03 +0000 (11:18 -0800)
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>
kernel/module.c

index f082832ad3ad3a3d720826aefbb0433d682a1da7..927a67e30855fe4fadd4e481c579088a7792a113 100644 (file)
@@ -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);