Andrii Nakryiko 24507ce81e bpf: ensure RCU Tasks Trace GP for sleepable raw tracepoint BPF links
Now that kernel supports sleepable tracepoints, the fact that
bpf_probe_unregister() is asynchronous, i.e., that it doesn't wait for
any in-flight tracepoints to conclude before returning, we now need to
delay BPF raw tp link's deallocation and bpf_prog_put() of its
underlying BPF program (regardless of program's own sleepable semantics)
until after full RCU Tasks Trace GP. With that GP over, we'll have
a guarantee that no tracepoint can reach BPF link and thus its BPF program.

We use newly added tracepoint_is_faultable() check to know when this RCU
Tasks Trace GP is necessary and utilize BPF link's own sleepable flag
passed through bpf_link_init_sleepable() initializer.

Link: https://lore.kernel.org/20241101181754.782341-3-andrii@kernel.org
Tested-by: Jordan Rife <jrife@google.com>
Reported-by: Jordan Rife <jrife@google.com>
Fixes: a363d27cdbc2 ("tracing: Allow system call tracepoints to handle page faults")
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
2024-11-01 14:39:07 -04:00
..
2024-06-18 17:19:46 +02:00
2024-08-30 08:55:26 -07:00
2024-08-30 08:55:26 -07:00
2024-09-24 14:54:26 -07:00
2024-07-09 17:01:46 +02:00
2023-12-06 17:17:20 -08:00
2022-05-10 11:20:45 -07:00
2024-08-30 08:55:26 -07:00
2024-08-30 08:55:26 -07:00
2024-08-30 08:57:47 -07:00
2023-10-23 15:01:53 -07:00
2024-05-14 19:42:24 -07:00
2024-09-24 14:54:26 -07:00