diff options
author | Nikolay Aleksandrov <nikolay@cumulusnetworks.com> | 2015-09-30 20:16:54 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-10-01 18:24:05 -0700 |
commit | 263344e64c0a2ac0e409a1a3f27effb6d57b853e (patch) | |
tree | 1383a9017adcfb96767f49cd36f3adfc4357e188 /net/bridge/br_if.c | |
parent | 77751ee8aec3e1748e0d1471ccbfc008793e88a6 (diff) | |
download | talos-op-linux-263344e64c0a2ac0e409a1a3f27effb6d57b853e.tar.gz talos-op-linux-263344e64c0a2ac0e409a1a3f27effb6d57b853e.zip |
bridge: vlan: fix possible null ptr derefs on port init and deinit
When a new port is being added we need to make vlgrp available after
rhashtable has been initialized and when removing a port we need to
flush the vlans and free the resources after we're sure noone can use
the port, i.e. after it's removed from the port list and synchronize_rcu
is executed.
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge/br_if.c')
-rw-r--r-- | net/bridge/br_if.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index 45e4757c6fd2..934cae9fa317 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c @@ -248,7 +248,6 @@ static void del_nbp(struct net_bridge_port *p) list_del_rcu(&p->list); - nbp_vlan_flush(p); br_fdb_delete_by_port(br, p, 0, 1); nbp_update_port_count(br); @@ -257,6 +256,8 @@ static void del_nbp(struct net_bridge_port *p) dev->priv_flags &= ~IFF_BRIDGE_PORT; netdev_rx_handler_unregister(dev); + /* use the synchronize_rcu done by netdev_rx_handler_unregister */ + nbp_vlan_flush(p); br_multicast_del_port(p); |