diff options
author | Neal Cardwell <ncardwell@google.com> | 2014-08-14 12:40:05 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-08-14 17:38:54 -0400 |
commit | 4fab9071950c2021d846e18351e0f46a1cffd67b (patch) | |
tree | f7538ee4e32315a32ab45f3e7bb00e9c6a919bfa /net/ipv6 | |
parent | bc8fc7b8f825ef17a0fb9e68c18ce94fa66ab337 (diff) |
tcp: fix tcp_release_cb() to dispatch via address family for mtu_reduced()
Make sure we use the correct address-family-specific function for
handling MTU reductions from within tcp_release_cb().
Previously AF_INET6 sockets were incorrectly always using the IPv6
code path when sometimes they were handling IPv4 traffic and thus had
an IPv4 dst.
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Diagnosed-by: Willem de Bruijn <willemb@google.com>
Fixes: 563d34d057862 ("tcp: dont drop MTU reduction indications")
Reviewed-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/tcp_ipv6.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index f2ce95502392..29964c3d363c 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
@@ -1595,6 +1595,7 @@ static const struct inet_connection_sock_af_ops ipv6_specific = { | |||
1595 | .compat_setsockopt = compat_ipv6_setsockopt, | 1595 | .compat_setsockopt = compat_ipv6_setsockopt, |
1596 | .compat_getsockopt = compat_ipv6_getsockopt, | 1596 | .compat_getsockopt = compat_ipv6_getsockopt, |
1597 | #endif | 1597 | #endif |
1598 | .mtu_reduced = tcp_v6_mtu_reduced, | ||
1598 | }; | 1599 | }; |
1599 | 1600 | ||
1600 | #ifdef CONFIG_TCP_MD5SIG | 1601 | #ifdef CONFIG_TCP_MD5SIG |
@@ -1625,6 +1626,7 @@ static const struct inet_connection_sock_af_ops ipv6_mapped = { | |||
1625 | .compat_setsockopt = compat_ipv6_setsockopt, | 1626 | .compat_setsockopt = compat_ipv6_setsockopt, |
1626 | .compat_getsockopt = compat_ipv6_getsockopt, | 1627 | .compat_getsockopt = compat_ipv6_getsockopt, |
1627 | #endif | 1628 | #endif |
1629 | .mtu_reduced = tcp_v4_mtu_reduced, | ||
1628 | }; | 1630 | }; |
1629 | 1631 | ||
1630 | #ifdef CONFIG_TCP_MD5SIG | 1632 | #ifdef CONFIG_TCP_MD5SIG |
@@ -1864,7 +1866,6 @@ struct proto tcpv6_prot = { | |||
1864 | .sendpage = tcp_sendpage, | 1866 | .sendpage = tcp_sendpage, |
1865 | .backlog_rcv = tcp_v6_do_rcv, | 1867 | .backlog_rcv = tcp_v6_do_rcv, |
1866 | .release_cb = tcp_release_cb, | 1868 | .release_cb = tcp_release_cb, |
1867 | .mtu_reduced = tcp_v6_mtu_reduced, | ||
1868 | .hash = tcp_v6_hash, | 1869 | .hash = tcp_v6_hash, |
1869 | .unhash = inet_unhash, | 1870 | .unhash = inet_unhash, |
1870 | .get_port = inet_csk_get_port, | 1871 | .get_port = inet_csk_get_port, |