From: Jiri Olsa <jolsa@redhat.com>
To: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: "Jiri Olsa" <jolsa@kernel.org>,
"Alexei Starovoitov" <ast@kernel.org>,
"Daniel Borkmann" <daniel@iogearbox.net>,
"Andrii Nakryiko" <andriin@fb.com>,
"kernel test robot" <lkp@intel.com>,
"Julia Lawall" <julia.lawall@lip6.fr>,
"Toke Høiland-Jørgensen" <toke@redhat.com>,
Networking <netdev@vger.kernel.org>, bpf <bpf@vger.kernel.org>,
"Martin KaFai Lau" <kafai@fb.com>,
"Song Liu" <songliubraving@fb.com>, "Yonghong Song" <yhs@fb.com>,
"John Fastabend" <john.fastabend@gmail.com>,
"KP Singh" <kpsingh@chromium.org>,
"Julia Lawall" <julia.lawall@inria.fr>
Subject: Re: [PATCHv4 bpf-next 1/5] bpf: Allow trampoline re-attach for tracing and lsm programs
Date: Wed, 14 Apr 2021 13:01:12 +0200 [thread overview]
Message-ID: <YHbLeFtUx31iACx+@krava> (raw)
In-Reply-To: <CAEf4BzbbVDCuAyCPYAdc363T6uAC6QDOwqNzFOHZPrHSbnRYCA@mail.gmail.com>
On Tue, Apr 13, 2021 at 03:03:27PM -0700, Andrii Nakryiko wrote:
> On Mon, Apr 12, 2021 at 9:28 AM Jiri Olsa <jolsa@kernel.org> wrote:
> >
> > Currently we don't allow re-attaching of trampolines. Once
> > it's detached, it can't be re-attach even when the program
> > is still loaded.
> >
> > Adding the possibility to re-attach the loaded tracing and
> > lsm programs.
> >
> > Fixing missing unlock with proper cleanup goto jump reported
> > by Julia.
> >
> > Reported-by: kernel test robot <lkp@intel.com>
> > Reported-by: Julia Lawall <julia.lawall@lip6.fr>
> > Acked-by: Toke Høiland-Jørgensen <toke@redhat.com>
> > Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> > ---
> > kernel/bpf/syscall.c | 23 +++++++++++++++++------
> > kernel/bpf/trampoline.c | 2 +-
> > 2 files changed, 18 insertions(+), 7 deletions(-)
> >
> > diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
> > index 6428634da57e..f02c6a871b4f 100644
> > --- a/kernel/bpf/syscall.c
> > +++ b/kernel/bpf/syscall.c
> > @@ -2645,14 +2645,25 @@ static int bpf_tracing_prog_attach(struct bpf_prog *prog,
> > * target_btf_id using the link_create API.
> > *
> > * - if tgt_prog == NULL when this function was called using the old
> > - * raw_tracepoint_open API, and we need a target from prog->aux
> > - *
> > - * The combination of no saved target in prog->aux, and no target
> > - * specified on load is illegal, and we reject that here.
> > + * raw_tracepoint_open API, and we need a target from prog->aux
> > + *
> > + * - if prog->aux->dst_trampoline and tgt_prog is NULL, the program
> > + * was detached and is going for re-attachment.
> > */
> > if (!prog->aux->dst_trampoline && !tgt_prog) {
> > - err = -ENOENT;
> > - goto out_unlock;
> > + /*
> > + * Allow re-attach for TRACING and LSM programs. If it's
> > + * currently linked, bpf_trampoline_link_prog will fail.
> > + * EXT programs need to specify tgt_prog_fd, so they
> > + * re-attach in separate code path.
> > + */
> > + if (prog->type != BPF_PROG_TYPE_TRACING &&
> > + prog->type != BPF_PROG_TYPE_LSM) {
> > + err = -EINVAL;
> > + goto out_unlock;
> > + }
> > + btf_id = prog->aux->attach_btf_id;
> > + key = bpf_trampoline_compute_key(NULL, prog->aux->attach_btf, btf_id);
> > }
> >
> > if (!prog->aux->dst_trampoline ||
> > diff --git a/kernel/bpf/trampoline.c b/kernel/bpf/trampoline.c
> > index 1f3a4be4b175..48b8b9916aa2 100644
> > --- a/kernel/bpf/trampoline.c
> > +++ b/kernel/bpf/trampoline.c
> > @@ -437,7 +437,7 @@ int bpf_trampoline_unlink_prog(struct bpf_prog *prog, struct bpf_trampoline *tr)
> > tr->extension_prog = NULL;
> > goto out;
> > }
> > - hlist_del(&prog->aux->tramp_hlist);
> > + hlist_del_init(&prog->aux->tramp_hlist);
>
> there is another hlist_del few lines above in error handling path of
> bpf_trampoline_link_prog(), it should probably be also updated to
> hlist_del_init(), no?
ugh, that one is missing.. will fix
thanks,
jirka
>
> > tr->progs_cnt[kind]--;
> > err = bpf_trampoline_update(tr);
> > out:
> > --
> > 2.30.2
> >
>
next prev parent reply other threads:[~2021-04-14 11:01 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-12 16:24 [PATCHv4 bpf-next 0/5] bpf: Tracing and lsm programs re-attach Jiri Olsa
2021-04-12 16:24 ` [PATCHv4 bpf-next 1/5] bpf: Allow trampoline re-attach for tracing and lsm programs Jiri Olsa
2021-04-13 22:03 ` Andrii Nakryiko
2021-04-14 11:01 ` Jiri Olsa [this message]
2021-04-12 16:24 ` [PATCHv4 bpf-next 2/5] selftests/bpf: Add re-attach test to fentry_test Jiri Olsa
2021-04-13 21:54 ` Andrii Nakryiko
2021-04-14 10:56 ` Jiri Olsa
2021-04-14 22:18 ` Andrii Nakryiko
2021-04-12 16:25 ` [PATCHv4 bpf-next 3/5] selftests/bpf: Add re-attach test to fexit_test Jiri Olsa
2021-04-13 21:55 ` Andrii Nakryiko
2021-04-14 11:01 ` Jiri Olsa
2021-04-12 16:25 ` [PATCHv4 bpf-next 4/5] selftests/bpf: Add re-attach test to lsm test Jiri Olsa
2021-04-13 21:57 ` Andrii Nakryiko
2021-04-14 10:54 ` Jiri Olsa
2021-04-12 16:25 ` [PATCHv4 bpf-next 5/5] selftests/bpf: Test that module can't be unloaded with attached trampoline Jiri Olsa
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=YHbLeFtUx31iACx+@krava \
--to=jolsa@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=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=julia.lawall@inria.fr \
--cc=julia.lawall@lip6.fr \
--cc=kafai@fb.com \
--cc=kpsingh@chromium.org \
--cc=lkp@intel.com \
--cc=netdev@vger.kernel.org \
--cc=songliubraving@fb.com \
--cc=toke@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox