All of lore.kernel.org
 help / color / mirror / Atom feed
From: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
To: Magnus Karlsson <magnus.karlsson@gmail.com>
Cc: <magnus.karlsson@intel.com>, <bjorn@kernel.org>, <ast@kernel.org>,
	<daniel@iogearbox.net>, <netdev@vger.kernel.org>,
	<jonathan.lemon@gmail.com>, <bpf@vger.kernel.org>,
	<syzbot+822d1359297e2694f873@syzkaller.appspotmail.com>
Subject: Re: [PATCH bpf v2] xsk: fix xsk_diag use-after-free error during socket cleanup
Date: Thu, 31 Aug 2023 12:39:21 +0200	[thread overview]
Message-ID: <ZPBt2RdiWstRa5WY@boxer> (raw)
In-Reply-To: <20230831100119.17408-1-magnus.karlsson@gmail.com>

On Thu, Aug 31, 2023 at 12:01:17PM +0200, Magnus Karlsson wrote:
> From: Magnus Karlsson <magnus.karlsson@intel.com>
> 
> Fix a use-after-free error that is possible if the xsk_diag interface
> is used after the socket has been unbound from the device. This can
> happen either due to the socket being closed or the device
> disappearing. In the early days of AF_XDP, the way we tested that a
> socket was not bound to a device was to simply check if the netdevice
> pointer in the xsk socket structure was NULL. Later, a better system
> was introduced by having an explicit state variable in the xsk socket
> struct. For example, the state of a socket that is on the way to being
> closed and has been unbound from the device is XSK_UNBOUND.
> 
> The commit in the Fixes tag below deleted the old way of signalling
> that a socket is unbound, setting dev to NULL. This in the belief that
> all code using the old way had been exterminated. That was
> unfortunately not true as the xsk diagnostics code was still using the
> old way and thus does not work as intended when a socket is going
> down. Fix this by introducing a test against the state variable. If
> the socket is in the state XSK_UNBOUND, simply abort the diagnostic's
> netlink operation.
> 
> Fixes: 18b1ab7aa76b ("xsk: Fix race at socket teardown")
> Reported-and-tested-by: syzbot+822d1359297e2694f873@syzkaller.appspotmail.com
> Signed-off-by: Magnus Karlsson <magnus.karlsson@intel.com>

Reviewed-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>

> ---
> v1 -> v2:
>   * Added READ_ONCE for the state variable [Magnus]
>   * Improved commit message [Maciej]
> 
>  net/xdp/xsk_diag.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/net/xdp/xsk_diag.c b/net/xdp/xsk_diag.c
> index c014217f5fa7..22b36c8143cf 100644
> --- a/net/xdp/xsk_diag.c
> +++ b/net/xdp/xsk_diag.c
> @@ -111,6 +111,9 @@ static int xsk_diag_fill(struct sock *sk, struct sk_buff *nlskb,
>  	sock_diag_save_cookie(sk, msg->xdiag_cookie);
> 
>  	mutex_lock(&xs->mutex);
> +	if (READ_ONCE(xs->state) == XSK_UNBOUND)
> +		goto out_nlmsg_trim;
> +
>  	if ((req->xdiag_show & XDP_SHOW_INFO) && xsk_diag_put_info(xs, nlskb))
>  		goto out_nlmsg_trim;
> 
> 
> base-commit: 7d35eb1a184a3f0759ad9e9cde4669b5c55b2063
> --
> 2.42.0

  reply	other threads:[~2023-08-31 10:39 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-31 10:01 [PATCH bpf v2] xsk: fix xsk_diag use-after-free error during socket cleanup Magnus Karlsson
2023-08-31 10:39 ` Maciej Fijalkowski [this message]
2023-08-31 10:55   ` Maciej Fijalkowski
2023-08-31 11:30 ` 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=ZPBt2RdiWstRa5WY@boxer \
    --to=maciej.fijalkowski@intel.com \
    --cc=ast@kernel.org \
    --cc=bjorn@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=jonathan.lemon@gmail.com \
    --cc=magnus.karlsson@gmail.com \
    --cc=magnus.karlsson@intel.com \
    --cc=netdev@vger.kernel.org \
    --cc=syzbot+822d1359297e2694f873@syzkaller.appspotmail.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.