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>
This commit is contained in:
@@ -284,11 +284,14 @@ static int __jump_label_mod_text_reserved(void *start, void *end)
|
|||||||
{
|
{
|
||||||
struct module *mod;
|
struct module *mod;
|
||||||
|
|
||||||
|
preempt_disable();
|
||||||
mod = __module_text_address((unsigned long)start);
|
mod = __module_text_address((unsigned long)start);
|
||||||
|
WARN_ON_ONCE(__module_text_address((unsigned long)end) != mod);
|
||||||
|
preempt_enable();
|
||||||
|
|
||||||
if (!mod)
|
if (!mod)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
WARN_ON_ONCE(__module_text_address((unsigned long)end) != mod);
|
|
||||||
|
|
||||||
return __jump_label_text_reserved(mod->jump_entries,
|
return __jump_label_text_reserved(mod->jump_entries,
|
||||||
mod->jump_entries + mod->num_jump_entries,
|
mod->jump_entries + mod->num_jump_entries,
|
||||||
|
Reference in New Issue
Block a user