aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bonding
diff options
context:
space:
mode:
authorJay Vosburgh <fubar@us.ibm.com>2007-11-14 00:16:29 -0500
committerDavid S. Miller <davem@davemloft.net>2007-11-14 00:16:29 -0500
commit8cbdeec637c1ce87bf329c5c19a9964e36bdf9fb (patch)
tree0019a5547ef145cdcd9f6d23e3b044f341829b8c /drivers/net/bonding
parentce1d18e0064d55106a7042c07cfca97cad66f407 (diff)
[BONDING]: Fix resource use after free
Fix bond_destroy and bond_free_all to not reference the struct net_device after calling unregister_netdevice. Bug and offending change reported by Moni Shoua <monis@voltaire.com> Signed-off-by: Jay Vosburgh <fubar@us.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bonding')
-rw-r--r--drivers/net/bonding/bond_main.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index a198404a3e36..423298c84a1d 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -1847,9 +1847,9 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev)
1847*/ 1847*/
1848void bond_destroy(struct bonding *bond) 1848void bond_destroy(struct bonding *bond)
1849{ 1849{
1850 unregister_netdevice(bond->dev);
1851 bond_deinit(bond->dev); 1850 bond_deinit(bond->dev);
1852 bond_destroy_sysfs_entry(bond); 1851 bond_destroy_sysfs_entry(bond);
1852 unregister_netdevice(bond->dev);
1853} 1853}
1854 1854
1855/* 1855/*
@@ -4475,8 +4475,8 @@ static void bond_free_all(void)
4475 bond_mc_list_destroy(bond); 4475 bond_mc_list_destroy(bond);
4476 /* Release the bonded slaves */ 4476 /* Release the bonded slaves */
4477 bond_release_all(bond_dev); 4477 bond_release_all(bond_dev);
4478 unregister_netdevice(bond_dev);
4479 bond_deinit(bond_dev); 4478 bond_deinit(bond_dev);
4479 unregister_netdevice(bond_dev);
4480 } 4480 }
4481 4481
4482#ifdef CONFIG_PROC_FS 4482#ifdef CONFIG_PROC_FS