| From foo@baz Sun May 27 17:33:38 CEST 2018 |
| From: Xin Long <lucien.xin@gmail.com> |
| Date: Tue, 27 Feb 2018 19:19:40 +0800 |
| Subject: ip6_tunnel: fix IFLA_MTU ignored on NEWLINK |
| |
| From: Xin Long <lucien.xin@gmail.com> |
| |
| [ Upstream commit a6aa80446234ec0ad38eecdb8efc59e91daae565 ] |
| |
| Commit 128bb975dc3c ("ip6_gre: init dev->mtu and dev->hard_header_len |
| correctly") fixed IFLA_MTU ignored on NEWLINK for ip6_gre. The same |
| mtu fix is also needed for ip6_tunnel. |
| |
| Note that dev->hard_header_len setting for ip6_tunnel works fine, |
| no need to fix it. |
| |
| Reported-by: Jianlin Shi <jishi@redhat.com> |
| Signed-off-by: Xin Long <lucien.xin@gmail.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/ipv6/ip6_tunnel.c | 12 ++++++++---- |
| 1 file changed, 8 insertions(+), 4 deletions(-) |
| |
| --- a/net/ipv6/ip6_tunnel.c |
| +++ b/net/ipv6/ip6_tunnel.c |
| @@ -1972,14 +1972,14 @@ static int ip6_tnl_newlink(struct net *s |
| { |
| struct net *net = dev_net(dev); |
| struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id); |
| - struct ip6_tnl *nt, *t; |
| struct ip_tunnel_encap ipencap; |
| + struct ip6_tnl *nt, *t; |
| + int err; |
| |
| nt = netdev_priv(dev); |
| |
| if (ip6_tnl_netlink_encap_parms(data, &ipencap)) { |
| - int err = ip6_tnl_encap_setup(nt, &ipencap); |
| - |
| + err = ip6_tnl_encap_setup(nt, &ipencap); |
| if (err < 0) |
| return err; |
| } |
| @@ -1995,7 +1995,11 @@ static int ip6_tnl_newlink(struct net *s |
| return -EEXIST; |
| } |
| |
| - return ip6_tnl_create2(dev); |
| + err = ip6_tnl_create2(dev); |
| + if (!err && tb[IFLA_MTU]) |
| + ip6_tnl_change_mtu(dev, nla_get_u32(tb[IFLA_MTU])); |
| + |
| + return err; |
| } |
| |
| static int ip6_tnl_changelink(struct net_device *dev, struct nlattr *tb[], |