ipv6: add mtu lock check in __ip6_rt_update_pmtu
authorXin Long <lucien.xin@gmail.com>
Fri, 28 Oct 2016 10:18:01 +0000 (18:18 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 31 Oct 2016 18:24:24 +0000 (14:24 -0400)
Prior to this patch, ipv6 didn't do mtu lock check in ip6_update_pmtu.
It leaded to that mtu lock doesn't really work when receiving the pkt
of ICMPV6_PKT_TOOBIG.

This patch is to add mtu lock check in __ip6_rt_update_pmtu just as ipv4
did in __ip_rt_update_pmtu.

Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/route.c

index 947ed1ded026388ed626122df3df11bc0922f6e7..7403d90dcb3851e90e21af777b6d270ad89034af 100644 (file)
@@ -1364,6 +1364,9 @@ static void __ip6_rt_update_pmtu(struct dst_entry *dst, const struct sock *sk,
        if (rt6->rt6i_flags & RTF_LOCAL)
                return;
 
+       if (dst_metric_locked(dst, RTAX_MTU))
+               return;
+
        dst_confirm(dst);
        mtu = max_t(u32, mtu, IPV6_MIN_MTU);
        if (mtu >= dst_mtu(dst))