From: Wei Wang <[email protected]>
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.