aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/bridge/br_ioctl.c25
-rw-r--r--net/bridge/br_sysfs_br.c10
-rw-r--r--net/bridge/br_sysfs_if.c2
3 files changed, 19 insertions, 18 deletions
diff --git a/net/bridge/br_ioctl.c b/net/bridge/br_ioctl.c
index 7222fe1d5460..cd8c3a44ab7d 100644
--- a/net/bridge/br_ioctl.c
+++ b/net/bridge/br_ioctl.c
@@ -85,13 +85,14 @@ static int get_fdb_entries(struct net_bridge *br, void __user *userbuf,
85/* called with RTNL */ 85/* called with RTNL */
86static int add_del_if(struct net_bridge *br, int ifindex, int isadd) 86static int add_del_if(struct net_bridge *br, int ifindex, int isadd)
87{ 87{
88 struct net *net = dev_net(br->dev);
88 struct net_device *dev; 89 struct net_device *dev;
89 int ret; 90 int ret;
90 91
91 if (!capable(CAP_NET_ADMIN)) 92 if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
92 return -EPERM; 93 return -EPERM;
93 94
94 dev = __dev_get_by_index(dev_net(br->dev), ifindex); 95 dev = __dev_get_by_index(net, ifindex);
95 if (dev == NULL) 96 if (dev == NULL)
96 return -EINVAL; 97 return -EINVAL;
97 98
@@ -178,25 +179,25 @@ static int old_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
178 } 179 }
179 180
180 case BRCTL_SET_BRIDGE_FORWARD_DELAY: 181 case BRCTL_SET_BRIDGE_FORWARD_DELAY:
181 if (!capable(CAP_NET_ADMIN)) 182 if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
182 return -EPERM; 183 return -EPERM;
183 184
184 return br_set_forward_delay(br, args[1]); 185 return br_set_forward_delay(br, args[1]);
185 186
186 case BRCTL_SET_BRIDGE_HELLO_TIME: 187 case BRCTL_SET_BRIDGE_HELLO_TIME:
187 if (!capable(CAP_NET_ADMIN)) 188 if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
188 return -EPERM; 189 return -EPERM;
189 190
190 return br_set_hello_time(br, args[1]); 191 return br_set_hello_time(br, args[1]);
191 192
192 case BRCTL_SET_BRIDGE_MAX_AGE: 193 case BRCTL_SET_BRIDGE_MAX_AGE:
193 if (!capable(CAP_NET_ADMIN)) 194 if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
194 return -EPERM; 195 return -EPERM;
195 196
196 return br_set_max_age(br, args[1]); 197 return br_set_max_age(br, args[1]);
197 198
198 case BRCTL_SET_AGEING_TIME: 199 case BRCTL_SET_AGEING_TIME:
199 if (!capable(CAP_NET_ADMIN)) 200 if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
200 return -EPERM; 201 return -EPERM;
201 202
202 br->ageing_time = clock_t_to_jiffies(args[1]); 203 br->ageing_time = clock_t_to_jiffies(args[1]);
@@ -236,14 +237,14 @@ static int old_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
236 } 237 }
237 238
238 case BRCTL_SET_BRIDGE_STP_STATE: 239 case BRCTL_SET_BRIDGE_STP_STATE:
239 if (!capable(CAP_NET_ADMIN)) 240 if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
240 return -EPERM; 241 return -EPERM;
241 242
242 br_stp_set_enabled(br, args[1]); 243 br_stp_set_enabled(br, args[1]);
243 return 0; 244 return 0;
244 245
245 case BRCTL_SET_BRIDGE_PRIORITY: 246 case BRCTL_SET_BRIDGE_PRIORITY:
246 if (!capable(CAP_NET_ADMIN)) 247 if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
247 return -EPERM; 248 return -EPERM;
248 249
249 spin_lock_bh(&br->lock); 250 spin_lock_bh(&br->lock);
@@ -256,7 +257,7 @@ static int old_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
256 struct net_bridge_port *p; 257 struct net_bridge_port *p;
257 int ret; 258 int ret;
258 259
259 if (!capable(CAP_NET_ADMIN)) 260 if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
260 return -EPERM; 261 return -EPERM;
261 262
262 spin_lock_bh(&br->lock); 263 spin_lock_bh(&br->lock);
@@ -273,7 +274,7 @@ static int old_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
273 struct net_bridge_port *p; 274 struct net_bridge_port *p;
274 int ret; 275 int ret;
275 276
276 if (!capable(CAP_NET_ADMIN)) 277 if (!ns_capable(dev_net(dev)->user_ns, CAP_NET_ADMIN))
277 return -EPERM; 278 return -EPERM;
278 279
279 spin_lock_bh(&br->lock); 280 spin_lock_bh(&br->lock);
@@ -330,7 +331,7 @@ static int old_deviceless(struct net *net, void __user *uarg)
330 { 331 {
331 char buf[IFNAMSIZ]; 332 char buf[IFNAMSIZ];
332 333
333 if (!capable(CAP_NET_ADMIN)) 334 if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
334 return -EPERM; 335 return -EPERM;
335 336
336 if (copy_from_user(buf, (void __user *)args[1], IFNAMSIZ)) 337 if (copy_from_user(buf, (void __user *)args[1], IFNAMSIZ))
@@ -360,7 +361,7 @@ int br_ioctl_deviceless_stub(struct net *net, unsigned int cmd, void __user *uar
360 { 361 {
361 char buf[IFNAMSIZ]; 362 char buf[IFNAMSIZ];
362 363
363 if (!capable(CAP_NET_ADMIN)) 364 if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
364 return -EPERM; 365 return -EPERM;
365 366
366 if (copy_from_user(buf, uarg, IFNAMSIZ)) 367 if (copy_from_user(buf, uarg, IFNAMSIZ))
diff --git a/net/bridge/br_sysfs_br.c b/net/bridge/br_sysfs_br.c
index cffb76e2161c..5913a3a0047b 100644
--- a/net/bridge/br_sysfs_br.c
+++ b/net/bridge/br_sysfs_br.c
@@ -37,7 +37,7 @@ static ssize_t store_bridge_parm(struct device *d,
37 unsigned long val; 37 unsigned long val;
38 int err; 38 int err;
39 39
40 if (!capable(CAP_NET_ADMIN)) 40 if (!ns_capable(dev_net(br->dev)->user_ns, CAP_NET_ADMIN))
41 return -EPERM; 41 return -EPERM;
42 42
43 val = simple_strtoul(buf, &endp, 0); 43 val = simple_strtoul(buf, &endp, 0);
@@ -133,7 +133,7 @@ static ssize_t store_stp_state(struct device *d,
133 char *endp; 133 char *endp;
134 unsigned long val; 134 unsigned long val;
135 135
136 if (!capable(CAP_NET_ADMIN)) 136 if (!ns_capable(dev_net(br->dev)->user_ns, CAP_NET_ADMIN))
137 return -EPERM; 137 return -EPERM;
138 138
139 val = simple_strtoul(buf, &endp, 0); 139 val = simple_strtoul(buf, &endp, 0);
@@ -166,7 +166,7 @@ static ssize_t store_group_fwd_mask(struct device *d,
166 char *endp; 166 char *endp;
167 unsigned long val; 167 unsigned long val;
168 168
169 if (!capable(CAP_NET_ADMIN)) 169 if (!ns_capable(dev_net(br->dev)->user_ns, CAP_NET_ADMIN))
170 return -EPERM; 170 return -EPERM;
171 171
172 val = simple_strtoul(buf, &endp, 0); 172 val = simple_strtoul(buf, &endp, 0);
@@ -301,7 +301,7 @@ static ssize_t store_group_addr(struct device *d,
301 u8 new_addr[6]; 301 u8 new_addr[6];
302 int i; 302 int i;
303 303
304 if (!capable(CAP_NET_ADMIN)) 304 if (!ns_capable(dev_net(br->dev)->user_ns, CAP_NET_ADMIN))
305 return -EPERM; 305 return -EPERM;
306 306
307 if (sscanf(buf, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", 307 if (sscanf(buf, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
@@ -333,7 +333,7 @@ static ssize_t store_flush(struct device *d,
333{ 333{
334 struct net_bridge *br = to_bridge(d); 334 struct net_bridge *br = to_bridge(d);
335 335
336 if (!capable(CAP_NET_ADMIN)) 336 if (!ns_capable(dev_net(br->dev)->user_ns, CAP_NET_ADMIN))
337 return -EPERM; 337 return -EPERM;
338 338
339 br_fdb_flush(br); 339 br_fdb_flush(br);
diff --git a/net/bridge/br_sysfs_if.c b/net/bridge/br_sysfs_if.c
index 80a4fc5d96ab..7ff95ba21982 100644
--- a/net/bridge/br_sysfs_if.c
+++ b/net/bridge/br_sysfs_if.c
@@ -221,7 +221,7 @@ static ssize_t brport_store(struct kobject * kobj,
221 char *endp; 221 char *endp;
222 unsigned long val; 222 unsigned long val;
223 223
224 if (!capable(CAP_NET_ADMIN)) 224 if (!ns_capable(dev_net(p->dev)->user_ns, CAP_NET_ADMIN))
225 return -EPERM; 225 return -EPERM;
226 226
227 val = simple_strtoul(buf, &endp, 0); 227 val = simple_strtoul(buf, &endp, 0);