Thread (11 messages) 11 messages, 4 authors, 2023-07-07

Re: [PATCH] fprobe: Ensure running fprobe_exit_handler() finished before calling rethook_free()

From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Date: 2023-07-07 00:17:25
Also in: bpf, lkml

On Thu, 6 Jul 2023 09:56:24 -0400
Steven Rostedt [off-list ref] wrote:
On Thu, 6 Jul 2023 14:10:12 +0900
Masami Hiramatsu (Google) [off-list ref] wrote:
quoted
With only Jiri's patch, following flow can happen;

------
 CPU1                              CPU2
 call unregister_fprobe()
 ...
                                   __fprobe_handler()
                                   rethook_hook() on probed function
 unregister_ftrace_function()
                                   return from probed function
                                   rethook hooks
                                   find rh->handler == fprobe_exit_handler
                                   call fprobe_exit_handler()
 rethook_free():
   set rh->handler = NULL;
 return from unreigster_fprobe;
                                   call fp->exit_handler() <- (*)

(*) In this point, the exit handler is called after returning from 
unregister_fprobe().
------

So, this patch changes it as following;
------
 CPU1                              CPU2
 call unregister_fprobe()
 ...
 rethook_stop():
   set rh->handler = NULL;
                                   __fprobe_handler()
                                   rethook_hook() on probed function
 unregister_ftrace_function()
                                   return from probed function
                                   rethook hooks
                                   find rh->handler == NULL
                                   return from rethook
 rethook_free()
 return from unreigster_fprobe;
------

I can also just put a synchronize_sched_rcu() right after rethook_free()
to wait for all running fprobe_exit_handler() too.
This makes more sense. Can you please add the above to the change log.
OK, let me update it.

Thanks!
Thanks,

-- Steve

-- 
Masami Hiramatsu (Google) [off-list ref]
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help