diff options
Diffstat (limited to 'net/ipv6/tcp_ipv6.c')
-rw-r--r-- | net/ipv6/tcp_ipv6.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index d72bcfb326d8..9977b6f19f2a 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
@@ -866,7 +866,8 @@ static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb) | |||
866 | * no RST generated if md5 hash doesn't match. | 866 | * no RST generated if md5 hash doesn't match. |
867 | */ | 867 | */ |
868 | sk1 = inet6_lookup_listener(dev_net(skb_dst(skb)->dev), | 868 | sk1 = inet6_lookup_listener(dev_net(skb_dst(skb)->dev), |
869 | &tcp_hashinfo, &ipv6h->saddr, | 869 | &tcp_hashinfo, NULL, 0, |
870 | &ipv6h->saddr, | ||
870 | th->source, &ipv6h->daddr, | 871 | th->source, &ipv6h->daddr, |
871 | ntohs(th->source), tcp_v6_iif(skb)); | 872 | ntohs(th->source), tcp_v6_iif(skb)); |
872 | if (!sk1) | 873 | if (!sk1) |
@@ -1375,8 +1376,8 @@ static int tcp_v6_rcv(struct sk_buff *skb) | |||
1375 | hdr = ipv6_hdr(skb); | 1376 | hdr = ipv6_hdr(skb); |
1376 | 1377 | ||
1377 | lookup: | 1378 | lookup: |
1378 | sk = __inet6_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest, | 1379 | sk = __inet6_lookup_skb(&tcp_hashinfo, skb, __tcp_hdrlen(th), |
1379 | inet6_iif(skb)); | 1380 | th->source, th->dest, inet6_iif(skb)); |
1380 | if (!sk) | 1381 | if (!sk) |
1381 | goto no_tcp_socket; | 1382 | goto no_tcp_socket; |
1382 | 1383 | ||
@@ -1500,6 +1501,7 @@ do_time_wait: | |||
1500 | struct sock *sk2; | 1501 | struct sock *sk2; |
1501 | 1502 | ||
1502 | sk2 = inet6_lookup_listener(dev_net(skb->dev), &tcp_hashinfo, | 1503 | sk2 = inet6_lookup_listener(dev_net(skb->dev), &tcp_hashinfo, |
1504 | skb, __tcp_hdrlen(th), | ||
1503 | &ipv6_hdr(skb)->saddr, th->source, | 1505 | &ipv6_hdr(skb)->saddr, th->source, |
1504 | &ipv6_hdr(skb)->daddr, | 1506 | &ipv6_hdr(skb)->daddr, |
1505 | ntohs(th->dest), tcp_v6_iif(skb)); | 1507 | ntohs(th->dest), tcp_v6_iif(skb)); |