From 905dd707fc856bae57de144dcf873583881f9489 Mon Sep 17 00:00:00 2001 From: Aaron Tomlin Date: Thu, 27 Oct 2016 10:36:06 +0100 Subject: [PATCH] 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 Acked-by: Rusty Russell 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 --- kernel/module.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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);