mirror of
https://github.com/joel16/android_kernel_sony_msm8994.git
synced 2024-11-30 07:31:23 +00:00
tcp: fix tcp_release_cb() to dispatch via address family for mtu_reduced()
[ Upstream commit 4fab9071950c2021d846e18351e0f46a1cffd67b ]
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: 563d34d057
("tcp: dont drop MTU reduction indications")
Reviewed-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
f2c58cc436
commit
5f80f4d820
@ -62,6 +62,7 @@ struct inet_connection_sock_af_ops {
|
||||
void (*addr2sockaddr)(struct sock *sk, struct sockaddr *);
|
||||
int (*bind_conflict)(const struct sock *sk,
|
||||
const struct inet_bind_bucket *tb, bool relax);
|
||||
void (*mtu_reduced)(struct sock *sk);
|
||||
};
|
||||
|
||||
/** inet_connection_sock - INET connection oriented sock
|
||||
|
@ -932,7 +932,6 @@ struct proto {
|
||||
struct sk_buff *skb);
|
||||
|
||||
void (*release_cb)(struct sock *sk);
|
||||
void (*mtu_reduced)(struct sock *sk);
|
||||
|
||||
/* Keeping track of sk's, looking them up, and port selection methods. */
|
||||
void (*hash)(struct sock *sk);
|
||||
|
@ -460,6 +460,7 @@ extern const u8 *tcp_parse_md5sig_option(const struct tcphdr *th);
|
||||
*/
|
||||
|
||||
extern void tcp_v4_send_check(struct sock *sk, struct sk_buff *skb);
|
||||
void tcp_v4_mtu_reduced(struct sock *sk);
|
||||
extern int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb);
|
||||
extern struct sock * tcp_create_openreq_child(struct sock *sk,
|
||||
struct request_sock *req,
|
||||
|
@ -268,7 +268,7 @@ EXPORT_SYMBOL(tcp_v4_connect);
|
||||
* It can be called through tcp_release_cb() if socket was owned by user
|
||||
* at the time tcp_v4_err() was called to handle ICMP message.
|
||||
*/
|
||||
static void tcp_v4_mtu_reduced(struct sock *sk)
|
||||
void tcp_v4_mtu_reduced(struct sock *sk)
|
||||
{
|
||||
struct dst_entry *dst;
|
||||
struct inet_sock *inet = inet_sk(sk);
|
||||
@ -298,6 +298,7 @@ static void tcp_v4_mtu_reduced(struct sock *sk)
|
||||
tcp_simple_retransmit(sk);
|
||||
} /* else let the usual retransmit timer handle it */
|
||||
}
|
||||
EXPORT_SYMBOL(tcp_v4_mtu_reduced);
|
||||
|
||||
static void do_redirect(struct sk_buff *skb, struct sock *sk)
|
||||
{
|
||||
@ -2142,6 +2143,7 @@ const struct inet_connection_sock_af_ops ipv4_specific = {
|
||||
.compat_setsockopt = compat_ip_setsockopt,
|
||||
.compat_getsockopt = compat_ip_getsockopt,
|
||||
#endif
|
||||
.mtu_reduced = tcp_v4_mtu_reduced,
|
||||
};
|
||||
EXPORT_SYMBOL(ipv4_specific);
|
||||
|
||||
@ -2867,7 +2869,6 @@ struct proto tcp_prot = {
|
||||
.sendpage = tcp_sendpage,
|
||||
.backlog_rcv = tcp_v4_do_rcv,
|
||||
.release_cb = tcp_release_cb,
|
||||
.mtu_reduced = tcp_v4_mtu_reduced,
|
||||
.hash = inet_hash,
|
||||
.unhash = inet_unhash,
|
||||
.get_port = inet_csk_get_port,
|
||||
|
@ -775,7 +775,7 @@ void tcp_release_cb(struct sock *sk)
|
||||
__sock_put(sk);
|
||||
}
|
||||
if (flags & (1UL << TCP_MTU_REDUCED_DEFERRED)) {
|
||||
sk->sk_prot->mtu_reduced(sk);
|
||||
inet_csk(sk)->icsk_af_ops->mtu_reduced(sk);
|
||||
__sock_put(sk);
|
||||
}
|
||||
}
|
||||
|
@ -1651,6 +1651,7 @@ static const struct inet_connection_sock_af_ops ipv6_specific = {
|
||||
.compat_setsockopt = compat_ipv6_setsockopt,
|
||||
.compat_getsockopt = compat_ipv6_getsockopt,
|
||||
#endif
|
||||
.mtu_reduced = tcp_v6_mtu_reduced,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_TCP_MD5SIG
|
||||
@ -1682,6 +1683,7 @@ static const struct inet_connection_sock_af_ops ipv6_mapped = {
|
||||
.compat_setsockopt = compat_ipv6_setsockopt,
|
||||
.compat_getsockopt = compat_ipv6_getsockopt,
|
||||
#endif
|
||||
.mtu_reduced = tcp_v4_mtu_reduced,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_TCP_MD5SIG
|
||||
@ -1919,7 +1921,6 @@ struct proto tcpv6_prot = {
|
||||
.sendpage = tcp_sendpage,
|
||||
.backlog_rcv = tcp_v6_do_rcv,
|
||||
.release_cb = tcp_release_cb,
|
||||
.mtu_reduced = tcp_v6_mtu_reduced,
|
||||
.hash = tcp_v6_hash,
|
||||
.unhash = inet_unhash,
|
||||
.get_port = inet_csk_get_port,
|
||||
|
Loading…
Reference in New Issue
Block a user