aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge/br_if.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-06-05 19:59:46 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-05 19:59:46 -0400
commitff3ea47c623276e9772cbc268471224648d5a7fe (patch)
treeecb77b11659f85abefed71aa075d4f879a7cc116 /net/bridge/br_if.c
parenta8c725045eb2eaa6c28a5493cb193f47a5c4afe4 (diff)
parent36485707bbd9729e0c52315b173aeed9bc2303dd (diff)
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: [BRIDGE]: fix locking and memory leak in br_add_bridge [IRDA]: Missing allocation result check in irlap_change_speed(). [PPPOE]: Missing result check in __pppoe_xmit(). [NET]: Eliminate unused /proc/sys/net/ethernet [NETCONSOLE]: Clean up initcall warning. [TCP]: Avoid skb_pull if possible when trimming head
Diffstat (limited to 'net/bridge/br_if.c')
-rw-r--r--net/bridge/br_if.c19
1 files changed, 7 insertions, 12 deletions
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
index ad1c7af65ec8..f5d47bf4f967 100644
--- a/net/bridge/br_if.c
+++ b/net/bridge/br_if.c
@@ -300,25 +300,20 @@ int br_add_bridge(const char *name)
300 rtnl_lock(); 300 rtnl_lock();
301 if (strchr(dev->name, '%')) { 301 if (strchr(dev->name, '%')) {
302 ret = dev_alloc_name(dev, dev->name); 302 ret = dev_alloc_name(dev, dev->name);
303 if (ret < 0) 303 if (ret < 0) {
304 goto err1; 304 free_netdev(dev);
305 goto out;
306 }
305 } 307 }
306 308
307 ret = register_netdevice(dev); 309 ret = register_netdevice(dev);
308 if (ret) 310 if (ret)
309 goto err2; 311 goto out;
310 312
311 ret = br_sysfs_addbr(dev); 313 ret = br_sysfs_addbr(dev);
312 if (ret) 314 if (ret)
313 goto err3; 315 unregister_netdevice(dev);
314 rtnl_unlock(); 316 out:
315 return 0;
316
317 err3:
318 unregister_netdev(dev);
319 err2:
320 free_netdev(dev);
321 err1:
322 rtnl_unlock(); 317 rtnl_unlock();
323 return ret; 318 return ret;
324} 319}