提交 8c923ce2 编写于 作者: N Nicolas Dichtel 提交者: David S. Miller

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: NNicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 b7c0ddf5
...@@ -722,19 +722,18 @@ static void ip_tunnel_update(struct ip_tunnel_net *itn, ...@@ -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 ip_tunnel_ioctl(struct net_device *dev, struct ip_tunnel_parm *p, int cmd)
{ {
int err = 0; int err = 0;
struct ip_tunnel *t; struct ip_tunnel *t = netdev_priv(dev);
struct net *net = dev_net(dev); struct net *net = t->net;
struct ip_tunnel *tunnel = netdev_priv(dev); struct ip_tunnel_net *itn = net_generic(net, t->ip_tnl_net_id);
struct ip_tunnel_net *itn = net_generic(net, tunnel->ip_tnl_net_id);
BUG_ON(!itn->fb_tunnel_dev); BUG_ON(!itn->fb_tunnel_dev);
switch (cmd) { switch (cmd) {
case SIOCGETTUNNEL: 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); t = ip_tunnel_find(itn, p, itn->fb_tunnel_dev->type);
if (t == NULL) if (t == NULL)
t = netdev_priv(dev); t = netdev_priv(dev);
}
memcpy(p, &t->parms, sizeof(*p)); memcpy(p, &t->parms, sizeof(*p));
break; break;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册