On Fri, Dec 1, 2023 at 7:51 AM Dmitrii Dolgov <9erthalion6@xxxxxxxxx> wrote: > > Currently, it's not allowed to attach an fentry/fexit prog to another > fentry/fexit. At the same time it's not uncommon to see a tracing > program with lots of logic in use, and the attachment limitation > prevents usage of fentry/fexit for performance analysis (e.g. with > "bpftool prog profile" command) in this case. An example could be > falcosecurity libs project that uses tp_btf tracing programs for > offloading certain part of logic into tail-called programs, but the > use-case is still generic enough -- a tracing program could be > complicated and heavy enough to warrant its profiling, yet frustratingly > it's not possible to do so use best tooling for that. > > Following the corresponding discussion [1], the reason for that is to > avoid tracing progs call cycles without introducing more complex > solutions. But currently it seems impossible to load and attach tracing > programs in a way that will form such a cycle. Replace "no same type" > requirement with verification that no more than one level of attachment > nesting is allowed. In this way only one fentry/fexit program could be > attached to another fentry/fexit to cover profiling use case, and still > no cycle could be formed. > > The series contains a test for recursive attachment, as well as a fix + > test for an issue in re-attachment branch of bpf_tracing_prog_attach. > When preparing the test for the main change set, I've stumbled upon the > possibility to construct a sequence of events when attach_btf would be > NULL while computing a trampoline key. It doesn't look like this issue > is triggered by the main change, because the reproduces doesn't actually > need to have an fentry attachment chain. It appears this set breaks test_progs/trace_ext: https://github.com/kernel-patches/bpf/actions/runs/7062243664/job/19225827450 Thanks, Song > > [1]: https://lore.kernel.org/bpf/20191108064039.2041889-16-ast@xxxxxxxxxx/ > > Dmitrii Dolgov (3): > bpf: Relax tracing prog recursive attach rules > selftests/bpf: Add test for recursive attachment of tracing progs > selftests/bpf: Test re-attachment fix for bpf_tracing_prog_attach > > Jiri Olsa (1): > bpf: Fix re-attachment branch in bpf_tracing_prog_attach > > include/linux/bpf.h | 1 + > include/uapi/linux/bpf.h | 1 + > kernel/bpf/syscall.c | 16 +++ > kernel/bpf/verifier.c | 33 ++--- > tools/include/uapi/linux/bpf.h | 1 + > .../bpf/prog_tests/recursive_attach.c | 117 ++++++++++++++++++ > .../selftests/bpf/progs/fentry_recursive.c | 19 +++ > .../bpf/progs/fentry_recursive_target.c | 31 +++++ > 8 files changed, 205 insertions(+), 14 deletions(-) > create mode 100644 tools/testing/selftests/bpf/prog_tests/recursive_attach.c > create mode 100644 tools/testing/selftests/bpf/progs/fentry_recursive.c > create mode 100644 tools/testing/selftests/bpf/progs/fentry_recursive_target.c > > > base-commit: 40d0eb0259ae77ace3e81d7454d1068c38bc95c2 > -- > 2.41.0 >