diff options
author | Jay Vosburgh <fubar@us.ibm.com> | 2008-01-29 21:07:45 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-02-03 07:28:12 -0500 |
commit | 4fe4763cd8cacd81d892193efb48b99c99c15323 (patch) | |
tree | 5eb58e95faa8cfc04a0d81993dcd99b5ecd93a98 /drivers/net/bonding | |
parent | 80ee5ad23150f1f3fe8d35728e860850ccea44da (diff) |
bonding: fix NULL pointer deref in startup processing
Fix the "are we creating a duplicate" check to not compare
the name if the name is NULL (meaning that the system should select
a name). Bug reported by Benny Amorsen <benny+usenet@amorsen.dk>.
Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bonding')
-rw-r--r-- | drivers/net/bonding/bond_main.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 65c7ebafaacd..81b45740ed77 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -4896,14 +4896,16 @@ int bond_create(char *name, struct bond_params *params, struct bonding **newbond | |||
4896 | down_write(&bonding_rwsem); | 4896 | down_write(&bonding_rwsem); |
4897 | 4897 | ||
4898 | /* Check to see if the bond already exists. */ | 4898 | /* Check to see if the bond already exists. */ |
4899 | list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list) | 4899 | if (name) { |
4900 | if (strnicmp(bond->dev->name, name, IFNAMSIZ) == 0) { | 4900 | list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list) |
4901 | printk(KERN_ERR DRV_NAME | 4901 | if (strnicmp(bond->dev->name, name, IFNAMSIZ) == 0) { |
4902 | printk(KERN_ERR DRV_NAME | ||
4902 | ": cannot add bond %s; it already exists\n", | 4903 | ": cannot add bond %s; it already exists\n", |
4903 | name); | 4904 | name); |
4904 | res = -EPERM; | 4905 | res = -EPERM; |
4905 | goto out_rtnl; | 4906 | goto out_rtnl; |
4906 | } | 4907 | } |
4908 | } | ||
4907 | 4909 | ||
4908 | bond_dev = alloc_netdev(sizeof(struct bonding), name ? name : "", | 4910 | bond_dev = alloc_netdev(sizeof(struct bonding), name ? name : "", |
4909 | ether_setup); | 4911 | ether_setup); |