diff options
author | Jay Vosburgh <fubar@us.ibm.com> | 2008-01-30 03:07:45 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-02-03 13:28:12 +0100 |
commit | 4fe4763cd8cacd81d892193efb48b99c99c15323 (patch) | |
tree | 5eb58e95faa8cfc04a0d81993dcd99b5ecd93a98 | |
parent | bonding: fix set_multicast_list locking (diff) | |
download | linux-4fe4763cd8cacd81d892193efb48b99c99c15323.tar.xz linux-4fe4763cd8cacd81d892193efb48b99c99c15323.zip |
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>
-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 down_write(&bonding_rwsem); /* Check to see if the bond already exists. */ - list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list) - if (strnicmp(bond->dev->name, name, IFNAMSIZ) == 0) { - printk(KERN_ERR DRV_NAME + if (name) { + list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list) + if (strnicmp(bond->dev->name, name, IFNAMSIZ) == 0) { + printk(KERN_ERR DRV_NAME ": cannot add bond %s; it already exists\n", - name); - res = -EPERM; - goto out_rtnl; - } + name); + res = -EPERM; + goto out_rtnl; + } + } bond_dev = alloc_netdev(sizeof(struct bonding), name ? name : "", ether_setup); |