ipv6: Fix the upper MTU limit in GRE tunnel
authorOussama Ghorbel <ou.ghorbel@gmail.com>
Mon, 7 Oct 2013 17:50:05 +0000 (18:50 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 8 Oct 2013 20:32:40 +0000 (16:32 -0400)
Unlike ipv4, the struct member hlen holds the length of the GRE and ipv6
headers. This length is also counted in dev->hard_header_len.
Perhaps, it's more clean to modify the hlen to count only the GRE header
without ipv6 header as the variable name suggest, but the simple way to fix
this without regression risk is simply modify the calculation of the limit
in ip6gre_tunnel_change_mtu function.
Verified in kernel version v3.11.

Signed-off-by: Oussama Ghorbel <ou.ghorbel@gmail.com>
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/ip6_gre.c

index 7bb5446b9d73c16a7f4096f2705ce60f997c7c2a..1ef1fa2b22a6a7bddfcd23856edd809f8bd97ab7 100644 (file)
@@ -1173,9 +1173,8 @@ done:
 
 static int ip6gre_tunnel_change_mtu(struct net_device *dev, int new_mtu)
 {
-       struct ip6_tnl *tunnel = netdev_priv(dev);
        if (new_mtu < 68 ||
-           new_mtu > 0xFFF8 - dev->hard_header_len - tunnel->hlen)
+           new_mtu > 0xFFF8 - dev->hard_header_len)
                return -EINVAL;
        dev->mtu = new_mtu;
        return 0;