]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
tcp: Fix dst leak in tcp_v6_connect().
authorKuniyuki Iwashima <kuniyu@google.com>
Wed, 6 May 2026 07:04:42 +0000 (07:04 +0000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 7 May 2026 15:39:15 +0000 (08:39 -0700)
commitecddc523cfdb85b3e132f13e293224ebfdfab564
treec53ebfe64284fc4e9e5249f6a82c38ed76005901
parent019c892e46544af0ae94ec833f79aa903c837666
tcp: Fix dst leak in tcp_v6_connect().

If a socket is bound to a wildcard address, tcp_v[46]_connect()
updates it with a non-wildcard address based on the route lookup.

After bhash2 was introduced in the cited commit, we must call
inet_bhash2_update_saddr() to update the bhash2 entry as well.

If inet_bhash2_update_saddr() fails, we must release the refcount
for dst by ip_route_connect() or ip6_dst_lookup_flow().

While tcp_v4_connect() calls ip_rt_put() in the error path,
tcp_v6_connect() does not call dst_release().

Let's call dst_release() when inet_bhash2_update_saddr() fails
in tcp_v6_connect().

Fixes: 28044fc1d495 ("net: Add a bhash2 table hashed by port and address")
Reported-by: Damiano Melotti <melotti@google.com>
Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20260506070443.1699879-1-kuniyu@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv6/tcp_ipv6.c