ip_tunnel: use the right netns in ioctl handler
Because the netdevice may be in another netns than the i/o netns, we should use the i/o netns instead of dev_net(dev). The variable 'tunnel' was used only to get 'itn', hence to simplify code I remove it and use 't' instead. Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b7c0ddf5f2
commit
8c923ce219
|
@ -722,19 +722,18 @@ static void ip_tunnel_update(struct ip_tunnel_net *itn,
|
|||
int ip_tunnel_ioctl(struct net_device *dev, struct ip_tunnel_parm *p, int cmd)
|
||||
{
|
||||
int err = 0;
|
||||
struct ip_tunnel *t;
|
||||
struct net *net = dev_net(dev);
|
||||
struct ip_tunnel *tunnel = netdev_priv(dev);
|
||||
struct ip_tunnel_net *itn = net_generic(net, tunnel->ip_tnl_net_id);
|
||||
struct ip_tunnel *t = netdev_priv(dev);
|
||||
struct net *net = t->net;
|
||||
struct ip_tunnel_net *itn = net_generic(net, t->ip_tnl_net_id);
|
||||
|
||||
BUG_ON(!itn->fb_tunnel_dev);
|
||||
switch (cmd) {
|
||||
case SIOCGETTUNNEL:
|
||||
t = NULL;
|
||||
if (dev == itn->fb_tunnel_dev)
|
||||
if (dev == itn->fb_tunnel_dev) {
|
||||
t = ip_tunnel_find(itn, p, itn->fb_tunnel_dev->type);
|
||||
if (t == NULL)
|
||||
t = netdev_priv(dev);
|
||||
}
|
||||
memcpy(p, &t->parms, sizeof(*p));
|
||||
break;
|
||||
|
||||
|
|
Loading…
Reference in New Issue