Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

fprobe: add unlock to match a succeeded ftrace_test_recursion_trylock

Unlock ftrace recursion lock when fprobe_kprobe_handler() is failed
because of some running kprobe.

Link: https://lore.kernel.org/all/20230703092336.268371-1-zegao@tencent.com/

Fixes: 3cc4e2c5fbae ("fprobe: make fprobe_kprobe_handler recursion free")
Reported-by: Yafang <laoar.shao@gmail.com>
Closes: https://lore.kernel.org/linux-trace-kernel/CALOAHbC6UpfFOOibdDiC7xFc5YFUgZnk3MZ=3Ny6we=AcrNbew@mail.gmail.com/
Signed-off-by: Ze Gao <zegao@tencent.com>
Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Acked-by: Yafang Shao <laoar.shao@gmail.com>
Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>

authored by

Ze Gao and committed by
Masami Hiramatsu (Google)
5f0c584d cf0a624d

+3 -1
+3 -1
kernel/trace/fprobe.c
··· 102 102 103 103 if (unlikely(kprobe_running())) { 104 104 fp->nmissed++; 105 - return; 105 + goto recursion_unlock; 106 106 } 107 107 108 108 kprobe_busy_begin(); 109 109 __fprobe_handler(ip, parent_ip, ops, fregs); 110 110 kprobe_busy_end(); 111 + 112 + recursion_unlock: 111 113 ftrace_test_recursion_unlock(bit); 112 114 } 113 115