OSDN Git Service

Merge tag 'probes-fixes-v6.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 12 Jul 2023 19:01:16 +0000 (12:01 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 12 Jul 2023 19:01:16 +0000 (12:01 -0700)
Pull probes fixes from Masami Hiramatsu:

 - Fix fprobe's rethook release issues:

     - Release rethook after ftrace_ops is unregistered so that the
       rethook is not accessed after free.

     - Stop rethook before ftrace_ops is unregistered so that the
       rethook is NOT used after exiting unregister_fprobe()

 - Fix eprobe cleanup logic. If it attaches to multiple events and
   failes to enable one of them, rollback all enabled events correctly.

 - Fix fprobe to unlock ftrace recursion lock correctly when it missed
   by another running kprobe.

 - Cleanup kprobe to remove unnecessary NULL.

 - Cleanup kprobe to remove unnecessary 0 initializations.

* tag 'probes-fixes-v6.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace:
  fprobe: Ensure running fprobe_exit_handler() finished before calling rethook_free()
  kernel: kprobes: Remove unnecessary ‘0’ values
  kprobes: Remove unnecessary ‘NULL’ values from correct_ret_addr
  fprobe: add unlock to match a succeeded ftrace_test_recursion_trylock
  kernel/trace: Fix cleanup logic of enable_trace_eprobe
  fprobe: Release rethook after the ftrace_ops is unregistered

1  2 
include/linux/rethook.h
kernel/kprobes.c
kernel/trace/fprobe.c
kernel/trace/rethook.c
kernel/trace/trace_eprobe.c

Simple merge
Simple merge
@@@ -368,17 -362,12 +370,11 @@@ int unregister_fprobe(struct fprobe *fp
  {
        int ret;
  
 -      if (!fp || (fp->ops.saved_func != fprobe_handler &&
 -                  fp->ops.saved_func != fprobe_kprobe_handler))
 +      if (!fprobe_is_registered(fp))
                return -EINVAL;
  
-       /*
-        * rethook_free() starts disabling the rethook, but the rethook handlers
-        * may be running on other processors at this point. To make sure that all
-        * current running handlers are finished, call unregister_ftrace_function()
-        * after this.
-        */
        if (fp->rethook)
-               rethook_free(fp->rethook);
+               rethook_stop(fp->rethook);
  
        ret = unregister_ftrace_function(&fp->ops);
        if (ret < 0)
Simple merge
Simple merge