From: "Toke Høiland-Jørgensen" <toke@redhat.com>
To: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Martin KaFai Lau <kafai@fb.com>, Song Liu <songliubraving@fb.com>,
Yonghong Song <yhs@fb.com>, Andrii Nakryiko <andriin@fb.com>,
John Fastabend <john.fastabend@gmail.com>,
Jiri Olsa <jolsa@redhat.com>,
Eelco Chaudron <echaudro@redhat.com>,
KP Singh <kpsingh@chromium.org>,
Networking <netdev@vger.kernel.org>, bpf <bpf@vger.kernel.org>
Subject: Re: [PATCH bpf-next v7 00/10] bpf: Support multi-attach for freplace programs
Date: Tue, 22 Sep 2020 11:48:54 +0200 [thread overview]
Message-ID: <87tuvqp2ex.fsf@toke.dk> (raw)
In-Reply-To: <CAEf4BzZbUrTKS9utppKCiBqkeybBEQQgwjqJhSz8FJyiK32VHA@mail.gmail.com>
Andrii Nakryiko <andrii.nakryiko@gmail.com> writes:
> On Sat, Sep 19, 2020 at 4:50 AM Toke Høiland-Jørgensen <toke@redhat.com> wrote:
>>
>> This series adds support attaching freplace BPF programs to multiple targets.
>> This is needed to support incremental attachment of multiple XDP programs using
>> the libxdp dispatcher model.
>>
>> The first patch fixes an issue that came up in review: The verifier will
>> currently allow MODIFY_RETURN tracing functions to attach to other BPF programs,
>> even though it is pretty clear from the commit messages introducing the
>> functionality that this was not the intention. This patch is included in the
>> serise because the subsequent refactoring patches touch the same code.
>>
>> The next three patches are refactoring patches: Patch 2 is a trivial change to
>> the logging in the verifier, split out to make the subsequent refactor easier to
>> read. Patch 3 refactors check_attach_btf_id() so that the checks on program and
>> target compatibility can be reused when attaching to a secondary location.
>>
>> Patch 4 moves prog_aux->linked_prog and the trampoline to be embedded in
>> bpf_tracing_link on attach, and freed by the link release logic, and introduces
>> a mutex to protect the writing of the pointers in prog->aux.
>>
>> Based on these refactorings, it becomes pretty straight-forward to support
>> multiple-attach for freplace programs (patch 5). This is simply a matter of
>> creating a second bpf_tracing_link if a target is supplied. However, for API
>> consistency with other types of link attach, this option is added to the
>> BPF_LINK_CREATE API instead of extending bpf_raw_tracepoint_open().
>>
>> Patch 6 is a port of Jiri Olsa's patch to support fentry/fexit on freplace
>> programs. His approach of getting the target type from the target program
>> reference no longer works after we've gotten rid of linked_prog (because the
>> bpf_tracing_link reference disappears on attach). Instead, we used the saved
>> reference to the target prog type that is also used to verify compatibility on
>> secondary freplace attachment.
>>
>> Patches 7 is the accompanying libbpf update, and patches 8-10 are selftests:
>> patch 8 tests for the multi-freplace functionality itself, patch 9 is Jiri's
>> previous selftest for the fentry-to-freplace fix, and patch 10 is a test for
>> the change introduced in patch 1, blocking MODIFY_RETURN functions from
>> attaching to other BPF programs.
>>
>> With this series, libxdp and xdp-tools can successfully attach multiple programs
>> one at a time. To play with this, use the 'freplace-multi-attach' branch of
>> xdp-tools:
>>
>> $ git clone --recurse-submodules --branch freplace-multi-attach https://github.com/xdp-project/xdp-tools
>> $ cd xdp-tools/xdp-loader
>> $ make
>> $ sudo ./xdp-loader load veth0 ../lib/testing/xdp_drop.o
>> $ sudo ./xdp-loader load veth0 ../lib/testing/xdp_pass.o
>> $ sudo ./xdp-loader status
>>
>> The series is also available here:
>> https://git.kernel.org/pub/scm/linux/kernel/git/toke/linux.git/log/?h=bpf-freplace-multi-attach-alt-07
>>
>> Changelog:
>>
>> v7:
>> - Add back missing ptype == prog->type check in link_create()
>> - Use tracing_bpf_link_attach() instead of separate freplace_bpf_link_attach()
>> - Don't break attachment of bpf_iters in libbpf
>
> What was specifically the issue and the fix for bpf_iters?
It was in libbpf - after making the attr passed to the kernel a union, I
was still unconditionally writing to the target_btf_id field, clobbering
the iter pointer. Which is also why it still happened even with a kernel
that didn't have the patch applied: I forgot to recompile the selftest :)
-Toke
prev parent reply other threads:[~2020-09-22 9:49 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-19 11:49 [PATCH bpf-next v7 00/10] bpf: Support multi-attach for freplace programs Toke Høiland-Jørgensen
2020-09-19 11:49 ` [PATCH bpf-next v7 01/10] bpf: disallow attaching modify_return tracing functions to other BPF programs Toke Høiland-Jørgensen
2020-09-21 22:39 ` Andrii Nakryiko
2020-09-22 9:52 ` Toke Høiland-Jørgensen
2020-09-19 11:49 ` [PATCH bpf-next v7 02/10] bpf: change logging calls from verbose() to bpf_log() and use log pointer Toke Høiland-Jørgensen
2020-09-19 11:49 ` [PATCH bpf-next v7 03/10] bpf: verifier: refactor check_attach_btf_id() Toke Høiland-Jørgensen
2020-09-21 23:05 ` Andrii Nakryiko
2020-09-22 10:14 ` Toke Høiland-Jørgensen
2020-09-22 11:16 ` Toke Høiland-Jørgensen
2020-09-22 16:28 ` Andrii Nakryiko
2020-09-22 17:41 ` Toke Høiland-Jørgensen
2020-09-19 11:49 ` [PATCH bpf-next v7 04/10] bpf: move prog->aux->linked_prog and trampoline into bpf_link on attach Toke Høiland-Jørgensen
2020-09-21 23:05 ` Andrii Nakryiko
2020-09-22 10:17 ` Toke Høiland-Jørgensen
2020-09-22 16:45 ` Andrii Nakryiko
2020-09-22 17:48 ` Toke Høiland-Jørgensen
2020-09-19 11:49 ` [PATCH bpf-next v7 05/10] bpf: support attaching freplace programs to multiple attach points Toke Høiland-Jørgensen
2020-09-21 23:08 ` Andrii Nakryiko
2020-09-19 11:49 ` [PATCH bpf-next v7 06/10] bpf: Fix context type resolving for extension programs Toke Høiland-Jørgensen
2020-09-21 23:09 ` Andrii Nakryiko
2020-09-19 11:49 ` [PATCH bpf-next v7 07/10] libbpf: add support for freplace attachment in bpf_link_create Toke Høiland-Jørgensen
2020-09-21 23:18 ` Andrii Nakryiko
2020-09-19 11:49 ` [PATCH bpf-next v7 08/10] selftests: add test for multiple attachments of freplace program Toke Høiland-Jørgensen
2020-09-21 23:21 ` Andrii Nakryiko
2020-09-19 11:49 ` [PATCH bpf-next v7 09/10] selftests/bpf: Adding test for arg dereference in extension trace Toke Høiland-Jørgensen
2020-09-19 11:49 ` [PATCH bpf-next v7 10/10] selftests: Add selftest for disallowing modify_return attachment to freplace Toke Høiland-Jørgensen
2020-09-21 23:25 ` Andrii Nakryiko
2020-09-21 23:26 ` [PATCH bpf-next v7 00/10] bpf: Support multi-attach for freplace programs Andrii Nakryiko
2020-09-22 9:48 ` Toke Høiland-Jørgensen [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87tuvqp2ex.fsf@toke.dk \
--to=toke@redhat.com \
--cc=andrii.nakryiko@gmail.com \
--cc=andriin@fb.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=echaudro@redhat.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@redhat.com \
--cc=kafai@fb.com \
--cc=kpsingh@chromium.org \
--cc=netdev@vger.kernel.org \
--cc=songliubraving@fb.com \
--cc=yhs@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.