]> Pileus Git - ~andy/linux/blobdiff - net/ipv6/inet6_connection_sock.c
tcp: ipv6: bind() use stronger condition for bind_conflict
[~andy/linux] / net / ipv6 / inet6_connection_sock.c
index 9bfab19ff3c02b301be08555b2c35a7982b2d1b6..5f25510f584ef8ce6462e3b2fd667dc2dc553471 100644 (file)
@@ -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;
                }
        }