From: Flavio Leitner Date: Tue, 5 Mar 2013 08:11:01 +0000 (+0000) Subject: tcp: ipv6: bind() use stronger condition for bind_conflict X-Git-Tag: v3.10-rc1~120^2~559 X-Git-Url: http://pileus.org/git/?a=commitdiff_plain;ds=sidebyside;h=dd9f319d94c99b96fc9b34ccde7389a91059fe31;p=~andy%2Flinux tcp: ipv6: bind() use stronger condition for bind_conflict We must try harder to get unique (addr, port) pairs when doing port autoselection for sockets with SO_REUSEADDR option set. This is a continuation of commit aacd9289af8b82f5fb01bcdd53d0e3406d1333c7 for IPv6. Signed-off-by: Flavio Leitner Signed-off-by: David S. Miller --- diff --git a/net/ipv6/inet6_connection_sock.c b/net/ipv6/inet6_connection_sock.c index 9bfab19ff3c..5f25510f584 100644 --- a/net/ipv6/inet6_connection_sock.c +++ b/net/ipv6/inet6_connection_sock.c @@ -54,6 +54,10 @@ int inet6_csk_bind_conflict(const struct sock *sk, if (ipv6_rcv_saddr_equal(sk, sk2)) break; } + if (!relax && reuse && sk2->sk_reuse && + sk2->sk_state != TCP_LISTEN && + ipv6_rcv_saddr_equal(sk, sk2)) + break; } }