On 06/30/2017 03:50 PM, Sabrina Dubroca wrote: > 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 <s...@queasysnail.net>
Thanks for fixing this up, I really didn't expect dev_net() not to return the correct net in setup(). Reviewed-by: Matthias Schiffer <mschif...@universe-factory.net> > --- > drivers/net/vxlan.c | 9 ++++++--- > 1 file 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; > } >
signature.asc
Description: OpenPGP digital signature