|
@@ -21,12 +21,12 @@
|
|
#include "br_private.h"
|
|
#include "br_private.h"
|
|
|
|
|
|
/* called with RTNL */
|
|
/* called with RTNL */
|
|
-static int get_bridge_ifindices(int *indices, int num)
|
|
|
|
|
|
+static int get_bridge_ifindices(struct net *net, int *indices, int num)
|
|
{
|
|
{
|
|
struct net_device *dev;
|
|
struct net_device *dev;
|
|
int i = 0;
|
|
int i = 0;
|
|
|
|
|
|
- for_each_netdev(&init_net, dev) {
|
|
|
|
|
|
+ for_each_netdev(net, dev) {
|
|
if (i >= num)
|
|
if (i >= num)
|
|
break;
|
|
break;
|
|
if (dev->priv_flags & IFF_EBRIDGE)
|
|
if (dev->priv_flags & IFF_EBRIDGE)
|
|
@@ -89,7 +89,7 @@ static int add_del_if(struct net_bridge *br, int ifindex, int isadd)
|
|
if (!capable(CAP_NET_ADMIN))
|
|
if (!capable(CAP_NET_ADMIN))
|
|
return -EPERM;
|
|
return -EPERM;
|
|
|
|
|
|
- dev = dev_get_by_index(&init_net, ifindex);
|
|
|
|
|
|
+ dev = dev_get_by_index(dev_net(br->dev), ifindex);
|
|
if (dev == NULL)
|
|
if (dev == NULL)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
@@ -309,7 +309,7 @@ static int old_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|
|
}
|
|
}
|
|
|
|
|
|
-static int old_deviceless(void __user *uarg)
|
|
|
|
|
|
+static int old_deviceless(struct net *net, void __user *uarg)
|
|
{
|
|
{
|
|
unsigned long args[3];
|
|
unsigned long args[3];
|
|
|
|
|
|
@@ -331,7 +331,7 @@ static int old_deviceless(void __user *uarg)
|
|
if (indices == NULL)
|
|
if (indices == NULL)
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|
|
- args[2] = get_bridge_ifindices(indices, args[2]);
|
|
|
|
|
|
+ args[2] = get_bridge_ifindices(net, indices, args[2]);
|
|
|
|
|
|
ret = copy_to_user((void __user *)args[1], indices, args[2]*sizeof(int))
|
|
ret = copy_to_user((void __user *)args[1], indices, args[2]*sizeof(int))
|
|
? -EFAULT : args[2];
|
|
? -EFAULT : args[2];
|
|
@@ -354,9 +354,9 @@ static int old_deviceless(void __user *uarg)
|
|
buf[IFNAMSIZ-1] = 0;
|
|
buf[IFNAMSIZ-1] = 0;
|
|
|
|
|
|
if (args[0] == BRCTL_ADD_BRIDGE)
|
|
if (args[0] == BRCTL_ADD_BRIDGE)
|
|
- return br_add_bridge(buf);
|
|
|
|
|
|
+ return br_add_bridge(net, buf);
|
|
|
|
|
|
- return br_del_bridge(buf);
|
|
|
|
|
|
+ return br_del_bridge(net, buf);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -368,7 +368,7 @@ int br_ioctl_deviceless_stub(struct net *net, unsigned int cmd, void __user *uar
|
|
switch (cmd) {
|
|
switch (cmd) {
|
|
case SIOCGIFBR:
|
|
case SIOCGIFBR:
|
|
case SIOCSIFBR:
|
|
case SIOCSIFBR:
|
|
- return old_deviceless(uarg);
|
|
|
|
|
|
+ return old_deviceless(net, uarg);
|
|
|
|
|
|
case SIOCBRADDBR:
|
|
case SIOCBRADDBR:
|
|
case SIOCBRDELBR:
|
|
case SIOCBRDELBR:
|
|
@@ -383,9 +383,9 @@ int br_ioctl_deviceless_stub(struct net *net, unsigned int cmd, void __user *uar
|
|
|
|
|
|
buf[IFNAMSIZ-1] = 0;
|
|
buf[IFNAMSIZ-1] = 0;
|
|
if (cmd == SIOCBRADDBR)
|
|
if (cmd == SIOCBRADDBR)
|
|
- return br_add_bridge(buf);
|
|
|
|
|
|
+ return br_add_bridge(net, buf);
|
|
|
|
|
|
- return br_del_bridge(buf);
|
|
|
|
|
|
+ return br_del_bridge(net, buf);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|