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>,
	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>,
	"Toke Høiland-Jørgensen" <toke@redhat.com>
Subject: Re: [PATCH] bpf: Prevent double bpf_prog_put call from bpf_tracing_prog_attach
Date: Mon, 11 Jan 2021 22:17:19 +0100	[thread overview]
Message-ID: <20210111211719.GD1210240@krava> (raw)
In-Reply-To: <CAEf4BzboXkJ96z45+CNJ0QNf74sR9=Ew7Nr94eXiBUk_5w-mDA@mail.gmail.com>

On Mon, Jan 11, 2021 at 12:34:48PM -0800, Andrii Nakryiko wrote:
> On Mon, Jan 11, 2021 at 11:18 AM Jiri Olsa <jolsa@kernel.org> wrote:
> >
> > The bpf_tracing_prog_attach error path calls bpf_prog_put
> > on prog, which causes refcount underflow when it's called
> > from link_create function.
> >
> >   link_create
> >     prog = bpf_prog_get              <-- get
> >     ...
> >     tracing_bpf_link_attach(prog..
> >       bpf_tracing_prog_attach(prog..
> >         out_put_prog:
> >           bpf_prog_put(prog);        <-- put
> >
> >     if (ret < 0)
> >       bpf_prog_put(prog);            <-- put
> >
> > Removing bpf_prog_put call from bpf_tracing_prog_attach
> > and making sure its callers call it instead.
> >
> > Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> > ---
> 
> I also double-checked all other attach functions called from
> link_create, they all seem to be fine and don't put prog on failure,
> so this should be the only needed fix. Also, missing:

it'd be easier to spot this if we use refcount_t instead of the atomic64_t,
I replaced it for this refcount and got nice console warning for this bug

then I saw:
  85192dbf4de0 bpf: Convert bpf_prog refcnt to atomic64_t

so I guess we need something like refcount64_t first

jirka

> 
> Fixes: 4a1e7c0c63e0 ("bpf: Support attaching freplace programs to
> multiple attach points")
> 
> Acked-by: Andrii Nakryiko <andrii@kernel.org>
> 
> >  kernel/bpf/syscall.c | 6 ++++--
> >  1 file changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
> > index c3bb03c8371f..e5999d86c76e 100644
> > --- a/kernel/bpf/syscall.c
> > +++ b/kernel/bpf/syscall.c
> > @@ -2712,7 +2712,6 @@ static int bpf_tracing_prog_attach(struct bpf_prog *prog,
> >  out_put_prog:
> >         if (tgt_prog_fd && tgt_prog)
> >                 bpf_prog_put(tgt_prog);
> > -       bpf_prog_put(prog);
> >         return err;
> >  }
> >
> > @@ -2825,7 +2824,10 @@ static int bpf_raw_tracepoint_open(const union bpf_attr *attr)
> >                         tp_name = prog->aux->attach_func_name;
> >                         break;
> >                 }
> > -               return bpf_tracing_prog_attach(prog, 0, 0);
> > +               err = bpf_tracing_prog_attach(prog, 0, 0);
> > +               if (err >= 0)
> > +                       return err;
> > +               goto out_put_prog;
> >         case BPF_PROG_TYPE_RAW_TRACEPOINT:
> >         case BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE:
> >                 if (strncpy_from_user(buf,
> > --
> > 2.26.2
> >
> 


  reply	other threads:[~2021-01-11 21:19 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-11 19:16 [PATCH] bpf: Prevent double bpf_prog_put call from bpf_tracing_prog_attach Jiri Olsa
2021-01-11 20:03 ` Toke Høiland-Jørgensen
2021-01-11 20:34 ` Andrii Nakryiko
2021-01-11 21:17   ` Jiri Olsa [this message]
2021-01-11 21:26     ` Andrii Nakryiko
2021-01-11 23:40 ` patchwork-bot+netdevbpf

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=20210111211719.GD1210240@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=kafai@fb.com \
    --cc=kpsingh@chromium.org \
    --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.