Commit bc3f9076f671f128c82022428992c30be57f22d5

Authored by Wang Chen
Committed by David S. Miller
1 parent 7e1a1ac1fb

bridge: Check return of dev_set_promiscuity

dev_set_promiscuity/allmulti might overflow.
Commit: "netdevice: Fix promiscuity and allmulti overflow" in net-next makes
dev_set_promiscuity/allmulti return error number if overflow happened.

Here, we check the positive increment for promiscuity to get error return.

Signed-off-by: Wang Chen <wangchen@cn.fujitsu.com>
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 1 changed file with 6 additions and 3 deletions Side-by-side Diff

... ... @@ -373,6 +373,10 @@
373 373 if (IS_ERR(p))
374 374 return PTR_ERR(p);
375 375  
  376 + err = dev_set_promiscuity(dev, 1);
  377 + if (err)
  378 + goto put_back;
  379 +
376 380 err = kobject_init_and_add(&p->kobj, &brport_ktype, &(dev->dev.kobj),
377 381 SYSFS_BRIDGE_PORT_ATTR);
378 382 if (err)
... ... @@ -388,7 +392,6 @@
388 392  
389 393 rcu_assign_pointer(dev->br_port, p);
390 394 dev_disable_lro(dev);
391   - dev_set_promiscuity(dev, 1);
392 395  
393 396 list_add_rcu(&p->list, &br->port_list);
394 397  
395 398  
396 399  
... ... @@ -412,12 +415,12 @@
412 415 br_fdb_delete_by_port(br, p, 1);
413 416 err1:
414 417 kobject_del(&p->kobj);
415   - goto put_back;
416 418 err0:
417 419 kobject_put(&p->kobj);
418   -
  420 + dev_set_promiscuity(dev, -1);
419 421 put_back:
420 422 dev_put(dev);
  423 + kfree(p);
421 424 return err;
422 425 }
423 426