On Thu, 28 Jan 2021, Christoph Hellwig wrote: > Allow for a RCU-sched critical section around find_module, following > the lower level find_module_all helper, and switch the two callers > outside of module.c to use such a RCU-sched critical section instead > of module_mutex.
That's a nice idea. > @@ -57,7 +58,7 @@ static void klp_find_object_module(struct klp_object *obj) > if (!klp_is_module(obj)) > return; > > - mutex_lock(&module_mutex); > + rcu_read_lock_sched(); > /* > * We do not want to block removal of patched modules and therefore > * we do not take a reference here. The patches are removed by > @@ -74,7 +75,7 @@ static void klp_find_object_module(struct klp_object *obj) > if (mod && mod->klp_alive) RCU always baffles me a bit, so I'll ask. Don't we need rcu_dereference_sched() here? "mod" comes from a RCU-protected list, so I wonder. > obj->mod = mod; > > - mutex_unlock(&module_mutex); > + rcu_read_unlock_sched(); > } Thanks Miroslav