aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/vxlan.c
diff options
context:
space:
mode:
authorSabrina Dubroca <sd@queasysnail.net>2017-06-30 15:50:00 +0200
committerDavid S. Miller <davem@davemloft.net>2017-07-03 02:04:10 -0700
commit889ce937c98f1f969137a8a2ee78627c1537d4b3 (patch)
treefd6c8a68042e13acbc1abedd16e09fb32f1fbcc9 /drivers/net/vxlan.c
parentMerge branch 'hns-phy-loopback' (diff)
downloadlinux-dev-889ce937c98f1f969137a8a2ee78627c1537d4b3.tar.xz
linux-dev-889ce937c98f1f969137a8a2ee78627c1537d4b3.zip
vxlan: correctly set vxlan->net when creating the device in a netns
Commit a985343ba906 ("vxlan: refactor verification and application of configuration") modified vxlan device creation, and replaced the assignment of vxlan->net to src_net with dev_net(netdev) in ->setup(). But dev_net(netdev) is not the same as src_net. At the time ->setup() is called, dev_net hasn't been set yet, so we end up creating the socket for the vxlan device in init_net. Fix this by bringing back the assignment of vxlan->net during device creation. Fixes: a985343ba906 ("vxlan: refactor verification and application of configuration") Signed-off-by: Sabrina Dubroca <sd@queasysnail.net> Reviewed-by: Matthias Schiffer <mschiffer@universe-factory.net> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/vxlan.c')
-rw-r--r--drivers/net/vxlan.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index fd0ff97e3d81..47d6e65851aa 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -2656,7 +2656,6 @@ static void vxlan_setup(struct net_device *dev)
vxlan->age_timer.data = (unsigned long) vxlan;
vxlan->dev = dev;
- vxlan->net = dev_net(dev);
gro_cells_init(&vxlan->gro_cells, dev);
@@ -3028,7 +3027,9 @@ static int vxlan_config_validate(struct net *src_net, struct vxlan_config *conf,
static void vxlan_config_apply(struct net_device *dev,
struct vxlan_config *conf,
- struct net_device *lowerdev, bool changelink)
+ struct net_device *lowerdev,
+ struct net *src_net,
+ bool changelink)
{
struct vxlan_dev *vxlan = netdev_priv(dev);
struct vxlan_rdst *dst = &vxlan->default_dst;
@@ -3044,6 +3045,8 @@ static void vxlan_config_apply(struct net_device *dev,
if (conf->mtu)
dev->mtu = conf->mtu;
+
+ vxlan->net = src_net;
}
dst->remote_vni = conf->vni;
@@ -3086,7 +3089,7 @@ static int vxlan_dev_configure(struct net *src_net, struct net_device *dev,
if (ret)
return ret;
- vxlan_config_apply(dev, conf, lowerdev, changelink);
+ vxlan_config_apply(dev, conf, lowerdev, src_net, changelink);
return 0;
}