[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <5e3c628ac298e_22ad2af2cbd0a5b4e3@john-XPS-13-9370.notmuch>
Date: Thu, 06 Feb 2020 11:01:30 -0800
From: John Fastabend <john.fastabend@...il.com>
To: Jakub Sitnicki <jakub@...udflare.com>, bpf@...r.kernel.org
Cc: netdev@...r.kernel.org, kernel-team@...udflare.com,
John Fastabend <john.fastabend@...il.com>
Subject: RE: [PATCH bpf 2/3] bpf, sockhash: synchronize_rcu before free'ing
map
Jakub Sitnicki wrote:
> We need to have a synchronize_rcu before free'ing the sockhash because any
> outstanding psock references will have a pointer to the map and when they
> use it, this could trigger a use after free.
>
> This is a sister fix for sockhash, following commit 2bb90e5cc90e ("bpf:
> sockmap, synchronize_rcu before free'ing map") which addressed sockmap,
> which comes from a manual audit.
>
> Fixes: 604326b41a6fb ("bpf, sockmap: convert to generic sk_msg interface")
> Signed-off-by: Jakub Sitnicki <jakub@...udflare.com>
> ---
> net/core/sock_map.c | 4 ++++
> 1 file changed, 4 insertions(+)
Nice catch thanks. As far as I know I've never seen this happen but
lets get this fixed.
Acked-by: John Fastabend <john.fastabend@...il.com>
>
> diff --git a/net/core/sock_map.c b/net/core/sock_map.c
> index fd8b426dbdf3..f36e13e577a3 100644
> --- a/net/core/sock_map.c
> +++ b/net/core/sock_map.c
> @@ -250,6 +250,7 @@ static void sock_map_free(struct bpf_map *map)
> }
> raw_spin_unlock_bh(&stab->lock);
>
> + /* wait for psock readers accessing its map link */
> synchronize_rcu();
>
> bpf_map_area_free(stab->sks);
> @@ -873,6 +874,9 @@ static void sock_hash_free(struct bpf_map *map)
> raw_spin_unlock_bh(&bucket->lock);
> }
>
> + /* wait for psock readers accessing its map link */
> + synchronize_rcu();
> +
> bpf_map_area_free(htab->buckets);
> kfree(htab);
> }
> --
> 2.24.1
>
Powered by blists - more mailing lists