forked from Minki/linux
ovs/gre,geneve: fix error path when creating an iface
After ipgre_newlink()/geneve_configure() call, the netdev is registered.
Fixes: 7e059158d5
("vxlan, gre, geneve: Set a large MTU on ovs-created tunnel devices")
CC: David Wragg <david@weave.works>
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d1e37288c9
commit
106da663ff
@ -1508,6 +1508,7 @@ struct net_device *geneve_dev_create_fb(struct net *net, const char *name,
|
|||||||
{
|
{
|
||||||
struct nlattr *tb[IFLA_MAX + 1];
|
struct nlattr *tb[IFLA_MAX + 1];
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
|
LIST_HEAD(list_kill);
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
memset(tb, 0, sizeof(tb));
|
memset(tb, 0, sizeof(tb));
|
||||||
@ -1519,8 +1520,10 @@ struct net_device *geneve_dev_create_fb(struct net *net, const char *name,
|
|||||||
err = geneve_configure(net, dev, &geneve_remote_unspec,
|
err = geneve_configure(net, dev, &geneve_remote_unspec,
|
||||||
0, 0, 0, 0, htons(dst_port), true,
|
0, 0, 0, 0, htons(dst_port), true,
|
||||||
GENEVE_F_UDP_ZERO_CSUM6_RX);
|
GENEVE_F_UDP_ZERO_CSUM6_RX);
|
||||||
if (err)
|
if (err) {
|
||||||
goto err;
|
free_netdev(dev);
|
||||||
|
return ERR_PTR(err);
|
||||||
|
}
|
||||||
|
|
||||||
/* openvswitch users expect packet sizes to be unrestricted,
|
/* openvswitch users expect packet sizes to be unrestricted,
|
||||||
* so set the largest MTU we can.
|
* so set the largest MTU we can.
|
||||||
@ -1532,7 +1535,8 @@ struct net_device *geneve_dev_create_fb(struct net *net, const char *name,
|
|||||||
return dev;
|
return dev;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
free_netdev(dev);
|
geneve_dellink(dev, &list_kill);
|
||||||
|
unregister_netdevice_many(&list_kill);
|
||||||
return ERR_PTR(err);
|
return ERR_PTR(err);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(geneve_dev_create_fb);
|
EXPORT_SYMBOL_GPL(geneve_dev_create_fb);
|
||||||
|
@ -1121,6 +1121,7 @@ struct net_device *gretap_fb_dev_create(struct net *net, const char *name,
|
|||||||
{
|
{
|
||||||
struct nlattr *tb[IFLA_MAX + 1];
|
struct nlattr *tb[IFLA_MAX + 1];
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
|
LIST_HEAD(list_kill);
|
||||||
struct ip_tunnel *t;
|
struct ip_tunnel *t;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
@ -1136,8 +1137,10 @@ struct net_device *gretap_fb_dev_create(struct net *net, const char *name,
|
|||||||
t->collect_md = true;
|
t->collect_md = true;
|
||||||
|
|
||||||
err = ipgre_newlink(net, dev, tb, NULL);
|
err = ipgre_newlink(net, dev, tb, NULL);
|
||||||
if (err < 0)
|
if (err < 0) {
|
||||||
goto out;
|
free_netdev(dev);
|
||||||
|
return ERR_PTR(err);
|
||||||
|
}
|
||||||
|
|
||||||
/* openvswitch users expect packet sizes to be unrestricted,
|
/* openvswitch users expect packet sizes to be unrestricted,
|
||||||
* so set the largest MTU we can.
|
* so set the largest MTU we can.
|
||||||
@ -1148,7 +1151,8 @@ struct net_device *gretap_fb_dev_create(struct net *net, const char *name,
|
|||||||
|
|
||||||
return dev;
|
return dev;
|
||||||
out:
|
out:
|
||||||
free_netdev(dev);
|
ip_tunnel_dellink(dev, &list_kill);
|
||||||
|
unregister_netdevice_many(&list_kill);
|
||||||
return ERR_PTR(err);
|
return ERR_PTR(err);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(gretap_fb_dev_create);
|
EXPORT_SYMBOL_GPL(gretap_fb_dev_create);
|
||||||
|
Loading…
Reference in New Issue
Block a user