]> git.baikalelectronics.ru Git - kernel.git/commit
module: fix race in kallsyms resolution during module load success.
authorRusty Russell <rusty@rustcorp.com.au>
Mon, 19 Jan 2015 22:37:05 +0000 (09:07 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Tue, 20 Jan 2015 01:08:34 +0000 (11:38 +1030)
commit574d5d555725c5bc06c02adfa27e024077bcd083
tree5260d20a4494fb9507cb947e2148085545e4c133
parent83f4bc908190903c5ed200bb50c814d377bf24a4
module: fix race in kallsyms resolution during module load success.

The kallsyms routines (module_symbol_name, lookup_module_* etc) disable
preemption to walk the modules rather than taking the module_mutex:
this is because they are used for symbol resolution during oopses.

This works because there are synchronize_sched() and synchronize_rcu()
in the unload and failure paths.  However, there's one case which doesn't
have that: the normal case where module loading succeeds, and we free
the init section.

We don't want a synchronize_rcu() there, because it would slow down
module loading: this bug was introduced in 2009 to speed module
loading in the first place.

Thus, we want to do the free in an RCU callback.  We do this in the
simplest possible way by allocating a new rcu_head: if we put it in
the module structure we'd have to worry about that getting freed.

Reported-by: Rui Xiang <rui.xiang@huawei.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
kernel/module.c