bpf: Support attaching freplace programs to multiple attach points
authorToke Høiland-Jørgensen <toke@redhat.com>
Tue, 29 Sep 2020 12:45:51 +0000 (14:45 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 29 Sep 2020 20:09:24 +0000 (13:09 -0700)
commit4a1e7c0c63e02daad751842b7880f9bbcdfb6e89
tree889732ecf7e8ffe11000a93435bcae1ac68a554b
parent3aac1ead5eb6b76f3d2b8d111e6de1c2de23fb34
bpf: Support attaching freplace programs to multiple attach points

This enables support for attaching freplace programs to multiple attach
points. It does this by amending the UAPI for bpf_link_Create with a target
btf ID that can be used to supply the new attachment point along with the
target program fd. The target must be compatible with the target that was
supplied at program load time.

The implementation reuses the checks that were factored out of
check_attach_btf_id() to ensure compatibility between the BTF types of the
old and new attachment. If these match, a new bpf_tracing_link will be
created for the new attach target, allowing multiple attachments to
co-exist simultaneously.

The code could theoretically support multiple-attach of other types of
tracing programs as well, but since I don't have a use case for any of
those, there is no API support for doing so.

Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Andrii Nakryiko <andriin@fb.com>
Link: https://lore.kernel.org/bpf/160138355169.48470.17165680973640685368.stgit@toke.dk
include/linux/bpf.h
include/uapi/linux/bpf.h
kernel/bpf/syscall.c
kernel/bpf/verifier.c
tools/include/uapi/linux/bpf.h