Commit bc3f9076f671f128c82022428992c30be57f22d5
Committed by
David S. Miller
1 parent
7e1a1ac1fb
Exists in
master
and in
7 other branches
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
net/bridge/br_if.c
... | ... | @@ -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 |