From: Wei Wang <wei...@google.com> Date: Wed, 2 Mar 2016 11:19:21 -0800
> @@ -566,7 +567,16 @@ void __udp6_lib_err(struct sk_buff *skb, struct > inet6_skb_parm *opt, > if (type == ICMPV6_PKT_TOOBIG) { > if (!ip6_sk_accept_pmtu(sk)) > goto out; > - ip6_sk_update_pmtu(skb, sk, info); > + bh_lock_sock(sk); > + if (sk->sk_state == TCP_ESTABLISHED && > + !sock_owned_by_user(sk) && > + ipv6_addr_equal(saddr, &sk->sk_v6_rcv_saddr) && > + ipv6_addr_equal(daddr, &sk->sk_v6_daddr) && > + uh->dest == sk->sk_dport) > + inet6_csk_update_pmtu(sk, ntohl(info)); If I apply this patch it will hide a bug. Why isn't ip6_sk_update_pmtu() matching the same route as the one attached to the socket? I'd prefer you figure out what part of the lookup key used is wrong, and fix that instead. Thanks.