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

Reply via email to