[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <69a43dc8-c545-1187-7185-4b85215b726d@kernel.org>
Date: Sun, 18 Sep 2022 09:30:21 -0600
From: David Ahern <dsahern@...nel.org>
To: Liang He <windhl@....com>, davem@...emloft.net,
yoshfuji@...ux-ipv6.org, edumazet@...gle.com, kuba@...nel.org,
pabeni@...hat.com, netdev@...r.kernel.org
Subject: Re: [PATCH] ipv4: ping: Fix potential use-after-free bug
On 9/16/22 4:07 AM, Liang He wrote:
> In ping_unhash(), we should move sock_put(sk) after any possible
> access point as the put function may free the object.
unhash handlers are called from sk_common_release which still has a
reference on the sock, so not really going to hit a UAF.
I do agree that it does not read correctly to 'put' a reference then
continue using the object. ie., the put should be moved to the end like
you have here. This is more of a tidiness exercise than a need to
backport to stable kernels.
>
> Fixes: c319b4d76b9e ("net: ipv4: add IPPROTO_ICMP socket kind")
> Signed-off-by: Liang He <windhl@....com>
> ---
>
> I have found other places containing similar code patterns.
>
> net/ipv4/ping.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
> index b83c2bd9d722..f90c86d37ffc 100644
> --- a/net/ipv4/ping.c
> +++ b/net/ipv4/ping.c
> @@ -157,10 +157,10 @@ void ping_unhash(struct sock *sk)
> spin_lock(&ping_table.lock);
> if (sk_hashed(sk)) {
> hlist_nulls_del_init_rcu(&sk->sk_nulls_node);
> - sock_put(sk);
> isk->inet_num = 0;
> isk->inet_sport = 0;
> sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
> + sock_put(sk);
> }
> spin_unlock(&ping_table.lock);
> }
Powered by blists - more mailing lists