Null pointer dereference in bonding driver, kernel 2.6.24
Subsystems (3)
In bond_main.c:
int bond_create(char *name, struct bond_params *params, struct bonding **newbond) {
...
/* 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
": cannot add bond %s; it already exists\n",
If 'name' is null we get a null dereference in strnicmp()
The code was added in 2.6.24.
---
(not even compile tested)
drivers/net/bonding/bond_main.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-)
drivers/net/bonding/bond_main.c +11 -9
@@ -4882,15 +4882,17 @@ int bond_create(char *name, struct bond_rtnl_lock ();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 -": cannot add bond %s; it already exists\n" , - name); - res = -EPERM ; - goto out_rtnl; - } +if (name) { +/* 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 +": cannot add bond %s; it already exists\n" , + name); + res = -EPERM ; + goto out_rtnl; + } + } bond_dev =alloc_netdev (sizeof (struct bonding ), name ? name :"" , ether_setup);
Quoted 12 lines · Chuck Ebbert
In
bond_main.c:int
bond_create(char *name, struct bond_params *params, struct bonding **newbond){
...
/* 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_ERRDRV_NAME
": cannot add bond %s; it already exists\n",
Quoted 3 lines
If 'name' is null we get a null dereference in
strnicmp()The code was added in 2.6.24.
This is already fixed in netdev-2.6#upstream. -J
---
-Jay Vosburgh, IBM Linux Technology Center, [email protected]