diff options
Diffstat (limited to 'net/ipv6/tcp_ipv6.c')
-rw-r--r-- | net/ipv6/tcp_ipv6.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index ced5dcf37465..f776ec4ecf6d 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
@@ -350,7 +350,7 @@ static void tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | |||
350 | sk = __inet6_lookup_established(net, &tcp_hashinfo, | 350 | sk = __inet6_lookup_established(net, &tcp_hashinfo, |
351 | &hdr->daddr, th->dest, | 351 | &hdr->daddr, th->dest, |
352 | &hdr->saddr, ntohs(th->source), | 352 | &hdr->saddr, ntohs(th->source), |
353 | skb->dev->ifindex); | 353 | skb->dev->ifindex, inet6_sdif(skb)); |
354 | 354 | ||
355 | if (!sk) { | 355 | if (!sk) { |
356 | __ICMP6_INC_STATS(net, __in6_dev_get(skb->dev), | 356 | __ICMP6_INC_STATS(net, __in6_dev_get(skb->dev), |
@@ -918,7 +918,8 @@ static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb) | |||
918 | &tcp_hashinfo, NULL, 0, | 918 | &tcp_hashinfo, NULL, 0, |
919 | &ipv6h->saddr, | 919 | &ipv6h->saddr, |
920 | th->source, &ipv6h->daddr, | 920 | th->source, &ipv6h->daddr, |
921 | ntohs(th->source), tcp_v6_iif(skb)); | 921 | ntohs(th->source), tcp_v6_iif(skb), |
922 | tcp_v6_sdif(skb)); | ||
922 | if (!sk1) | 923 | if (!sk1) |
923 | goto out; | 924 | goto out; |
924 | 925 | ||
@@ -1397,6 +1398,7 @@ static void tcp_v6_fill_cb(struct sk_buff *skb, const struct ipv6hdr *hdr, | |||
1397 | 1398 | ||
1398 | static int tcp_v6_rcv(struct sk_buff *skb) | 1399 | static int tcp_v6_rcv(struct sk_buff *skb) |
1399 | { | 1400 | { |
1401 | int sdif = inet6_sdif(skb); | ||
1400 | const struct tcphdr *th; | 1402 | const struct tcphdr *th; |
1401 | const struct ipv6hdr *hdr; | 1403 | const struct ipv6hdr *hdr; |
1402 | bool refcounted; | 1404 | bool refcounted; |
@@ -1430,7 +1432,7 @@ static int tcp_v6_rcv(struct sk_buff *skb) | |||
1430 | 1432 | ||
1431 | lookup: | 1433 | lookup: |
1432 | sk = __inet6_lookup_skb(&tcp_hashinfo, skb, __tcp_hdrlen(th), | 1434 | sk = __inet6_lookup_skb(&tcp_hashinfo, skb, __tcp_hdrlen(th), |
1433 | th->source, th->dest, inet6_iif(skb), | 1435 | th->source, th->dest, inet6_iif(skb), sdif, |
1434 | &refcounted); | 1436 | &refcounted); |
1435 | if (!sk) | 1437 | if (!sk) |
1436 | goto no_tcp_socket; | 1438 | goto no_tcp_socket; |
@@ -1563,7 +1565,8 @@ do_time_wait: | |||
1563 | skb, __tcp_hdrlen(th), | 1565 | skb, __tcp_hdrlen(th), |
1564 | &ipv6_hdr(skb)->saddr, th->source, | 1566 | &ipv6_hdr(skb)->saddr, th->source, |
1565 | &ipv6_hdr(skb)->daddr, | 1567 | &ipv6_hdr(skb)->daddr, |
1566 | ntohs(th->dest), tcp_v6_iif(skb)); | 1568 | ntohs(th->dest), tcp_v6_iif(skb), |
1569 | sdif); | ||
1567 | if (sk2) { | 1570 | if (sk2) { |
1568 | struct inet_timewait_sock *tw = inet_twsk(sk); | 1571 | struct inet_timewait_sock *tw = inet_twsk(sk); |
1569 | inet_twsk_deschedule_put(tw); | 1572 | inet_twsk_deschedule_put(tw); |
@@ -1610,7 +1613,7 @@ static void tcp_v6_early_demux(struct sk_buff *skb) | |||
1610 | sk = __inet6_lookup_established(dev_net(skb->dev), &tcp_hashinfo, | 1613 | sk = __inet6_lookup_established(dev_net(skb->dev), &tcp_hashinfo, |
1611 | &hdr->saddr, th->source, | 1614 | &hdr->saddr, th->source, |
1612 | &hdr->daddr, ntohs(th->dest), | 1615 | &hdr->daddr, ntohs(th->dest), |
1613 | inet6_iif(skb)); | 1616 | inet6_iif(skb), inet6_sdif(skb)); |
1614 | if (sk) { | 1617 | if (sk) { |
1615 | skb->sk = sk; | 1618 | skb->sk = sk; |
1616 | skb->destructor = sock_edemux; | 1619 | skb->destructor = sock_edemux; |