summaryrefslogtreecommitdiffstats
path: root/net/ipv6/udp.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6/udp.c')
-rw-r--r--net/ipv6/udp.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index 2c8beb3896d1..aae4938f3dea 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -158,13 +158,14 @@ static struct sock *udp6_lib_lookup2(struct net *net,
158 score = compute_score(sk, net, saddr, sport, 158 score = compute_score(sk, net, saddr, sport,
159 daddr, hnum, dif, sdif); 159 daddr, hnum, dif, sdif);
160 if (score > badness) { 160 if (score > badness) {
161 if (sk->sk_reuseport) { 161 if (sk->sk_reuseport &&
162 sk->sk_state != TCP_ESTABLISHED) {
162 hash = udp6_ehashfn(net, daddr, hnum, 163 hash = udp6_ehashfn(net, daddr, hnum,
163 saddr, sport); 164 saddr, sport);
164 165
165 result = reuseport_select_sock(sk, hash, skb, 166 result = reuseport_select_sock(sk, hash, skb,
166 sizeof(struct udphdr)); 167 sizeof(struct udphdr));
167 if (result) 168 if (result && !reuseport_has_conns(sk, false))
168 return result; 169 return result;
169 } 170 }
170 result = sk; 171 result = sk;