Messages in this thread | | | Date | Wed, 05 Nov 2008 08:53:41 +0800 | From | Lai Jiangshan <> | Subject | Re: [PATCH] kprobes: disable preempt for module_text_address() |
| |
Ananth N Mavinakayanahalli wrote: > On Tue, Nov 04, 2008 at 01:56:21PM +0800, Lai Jiangshan wrote: >> __register_kprobe() may be preempted after module_text_address() >> but before try_module_get(), and in this interval the module may be >> unloaded and try_module_get(probed_mod) will access to invalid address. >> this patch uses preempt_disable() to protect it. > > Looking at other users of try_module_get, I don't see this as a usage > model being followed elsewhere. Also, in case such a preemption does > happen, module_is_live() will fail and we should still be ok.
when preemption happen, and mod is freed, module_is_live() will access to invalid address. So it's NOT OK.
Other users of try_module_get() are correct. most are like this:
void func(XXX, XXXX) { try_module_get(XXX->owner) }
Because we have had a reference to the module before calling try_module_get(). this means the module is still in the kernel when try_module_get() called. so we do not need any protection for using try_module_get(). <in other word, caller of func() has made sure the module will not be unloaded>
In this function __register_kprobe(), probed_mod is the return value of module_text_address(), probed_mod will go in any time before try_module_get().
> > I don't see a reason for this patch unless there is a clear failure case > (register_kprobe failing 'cos of a module unload is perfectly ok). > > Ananth >
| |