aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2016-07-26 22:47:35 -0400
committerRusty Russell <rusty@rustcorp.com.au>2016-08-03 20:46:54 -0400
commitbdc9f373551dd3f1e6fae1618f2394ee9bc7db2e (patch)
tree544ec1154b88d6e39134f4d2bf7b3110639ba8ee
parent0ef7653797addea8ba1bf97f8208a54a62498d94 (diff)
jump_label: disable preemption around __module_text_address().
Steven reported a warning caused by not holding module_mutex or rcu_read_lock_sched: his backtrace was corrupted but a quick audit found this possible cause. It's wrong anyway... Reported-by: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-rw-r--r--kernel/jump_label.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/kernel/jump_label.c b/kernel/jump_label.c
index 0dbea887d625..0eef93962a91 100644
--- a/kernel/jump_label.c
+++ b/kernel/jump_label.c
@@ -284,11 +284,14 @@ static int __jump_label_mod_text_reserved(void *start, void *end)
284{ 284{
285 struct module *mod; 285 struct module *mod;
286 286
287 preempt_disable();
287 mod = __module_text_address((unsigned long)start); 288 mod = __module_text_address((unsigned long)start);
289 WARN_ON_ONCE(__module_text_address((unsigned long)end) != mod);
290 preempt_enable();
291
288 if (!mod) 292 if (!mod)
289 return 0; 293 return 0;
290 294
291 WARN_ON_ONCE(__module_text_address((unsigned long)end) != mod);
292 295
293 return __jump_label_text_reserved(mod->jump_entries, 296 return __jump_label_text_reserved(mod->jump_entries,
294 mod->jump_entries + mod->num_jump_entries, 297 mod->jump_entries + mod->num_jump_entries,