All of lore.kernel.org
 help / color / mirror / Atom feed
From: Magnus Karlsson <magnus.karlsson@gmail.com>
To: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: "Magnus Karlsson" <magnus.karlsson@intel.com>,
	"Björn Töpel" <bjorn.topel@intel.com>,
	"Alexei Starovoitov" <ast@kernel.org>,
	"Daniel Borkmann" <daniel@iogearbox.net>,
	Networking <netdev@vger.kernel.org>,
	"Jonathan Lemon" <jonathan.lemon@gmail.com>,
	bpf <bpf@vger.kernel.org>
Subject: Re: [PATCH bpf 2/2] libbpf: fix possible use after free in xsk_socket__delete
Date: Wed, 4 Nov 2020 09:26:57 +0100	[thread overview]
Message-ID: <CAJ8uoz2Cqtw0gPpuyk79z4Rt8dYLmxd9DsSeAB4fQFJWMHLHVw@mail.gmail.com> (raw)
In-Reply-To: <CAEf4Bzah-7akFkjUAJR=ovXLAnLd6EvLMMOy+GBbc4R28TY-eg@mail.gmail.com>

On Tue, Nov 3, 2020 at 8:05 PM Andrii Nakryiko
<andrii.nakryiko@gmail.com> wrote:
>
> On Tue, Nov 3, 2020 at 1:42 AM Magnus Karlsson
> <magnus.karlsson@gmail.com> wrote:
> >
> > From: Magnus Karlsson <magnus.karlsson@intel.com>
> >
> > Fix a possible use after free in xsk_socket__delete that will happen
> > if xsk_put_ctx() frees the ctx. To fix, save the umem reference taken
> > from the context and just use that instead.
> >
> > Fixes: 2f6324a3937f ("libbpf: Support shared umems between queues and devices")
> > Signed-off-by: Magnus Karlsson <magnus.karlsson@intel.com>
> > ---
> >  tools/lib/bpf/xsk.c | 6 ++++--
> >  1 file changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/tools/lib/bpf/xsk.c b/tools/lib/bpf/xsk.c
> > index 504b7a8..9bc537d 100644
> > --- a/tools/lib/bpf/xsk.c
> > +++ b/tools/lib/bpf/xsk.c
> > @@ -892,6 +892,7 @@ void xsk_socket__delete(struct xsk_socket *xsk)
> >  {
> >         size_t desc_sz = sizeof(struct xdp_desc);
> >         struct xdp_mmap_offsets off;
> > +       struct xsk_umem *umem;
> >         struct xsk_ctx *ctx;
> >         int err;
> >
> > @@ -899,6 +900,7 @@ void xsk_socket__delete(struct xsk_socket *xsk)
> >                 return;
> >
> >         ctx = xsk->ctx;
> > +       umem = ctx->umem;
> >         if (ctx->prog_fd != -1) {
> >                 xsk_delete_bpf_maps(xsk);
> >                 close(ctx->prog_fd);
> > @@ -918,11 +920,11 @@ void xsk_socket__delete(struct xsk_socket *xsk)
> >
> >         xsk_put_ctx(ctx);
> >
> > -       ctx->umem->refcount--;
> > +       umem->refcount--;
>
> if you moved ctx->umem->refcount--; to before xdk_put_ctx(ctx), would
> that also work?

Yes, it would for that statement, but I still need the umem pointer
for the statement below. And this statement of potentially closing the
fd needs to be after xsk_put_ctx(). So we might as well keep
ujmem->refcount-- where it is, if that is ok with you?

> >         /* Do not close an fd that also has an associated umem connected
> >          * to it.
> >          */
> > -       if (xsk->fd != ctx->umem->fd)
> > +       if (xsk->fd != umem->fd)
> >                 close(xsk->fd);
> >         free(xsk);
> >  }
> > --
> > 2.7.4
> >

  reply	other threads:[~2020-11-04  8:27 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-03  9:41 [PATCH bpf 0/2] libbpf: fix two bugs in xsk_socket__delete Magnus Karlsson
2020-11-03  9:41 ` [PATCH bpf 1/2] libbpf: fix null dereference " Magnus Karlsson
2020-11-03 19:02   ` Andrii Nakryiko
2020-11-03  9:41 ` [PATCH bpf 2/2] libbpf: fix possible use after free " Magnus Karlsson
2020-11-03 19:05   ` Andrii Nakryiko
2020-11-04  8:26     ` Magnus Karlsson [this message]
2020-11-04 19:42       ` Andrii Nakryiko

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=CAJ8uoz2Cqtw0gPpuyk79z4Rt8dYLmxd9DsSeAB4fQFJWMHLHVw@mail.gmail.com \
    --to=magnus.karlsson@gmail.com \
    --cc=andrii.nakryiko@gmail.com \
    --cc=ast@kernel.org \
    --cc=bjorn.topel@intel.com \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=jonathan.lemon@gmail.com \
    --cc=magnus.karlsson@intel.com \
    --cc=netdev@vger.kernel.org \
    /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.