diff options
author | Elad Raz <eladr@mellanox.com> | 2016-01-06 13:01:04 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-08-24 13:27:01 +0200 |
commit | 6d124ea608ac800f46100741f7ccd79791c061c8 (patch) | |
tree | 74016079b14e200e9cb7825790b8c438737b4487 | |
parent | 62c4e369c9b98480a4b75b3a74a962a6b298120b (diff) | |
download | linux-cip-6d124ea608ac800f46100741f7ccd79791c061c8.tar.gz |
bridge: Propagate vlan add failure to user
commit 08474cc1e6ea71237cab7e4a651a623c9dea1084 upstream.
Disallow adding interfaces to a bridge when vlan filtering operation
failed. Send the failure code to the user.
Signed-off-by: Elad Raz <eladr@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: SZ Lin (林上智) <sz.lin@moxa.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | net/bridge/br_if.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index 3400b1e4766880..50e84e634dfe5e 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c @@ -511,8 +511,11 @@ int br_add_if(struct net_bridge *br, struct net_device *dev) if (br_fdb_insert(br, p, dev->dev_addr, 0)) netdev_err(dev, "failed insert local address bridge forwarding table\n"); - if (nbp_vlan_init(p)) + err = nbp_vlan_init(p); + if (err) { netdev_err(dev, "failed to initialize vlan filtering on this port\n"); + goto err6; + } spin_lock_bh(&br->lock); changed_addr = br_stp_recalculate_bridge_id(br); @@ -533,6 +536,12 @@ int br_add_if(struct net_bridge *br, struct net_device *dev) return 0; +err6: + list_del_rcu(&p->list); + br_fdb_delete_by_port(br, p, 0, 1); + nbp_update_port_count(br); + netdev_upper_dev_unlink(dev, br->dev); + err5: dev->priv_flags &= ~IFF_BRIDGE_PORT; netdev_rx_handler_unregister(dev); |