All of lore.kernel.org
 help / color / mirror / Atom feed
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
> >
> 


  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 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.