linux/net/bridge
Ido Schimmel 4c62ddf7e3 switchdev: Require RTNL mutex to be held when sending FDB notifications
[ Upstream commit 4f2c6ae5c6 ]

When switchdev drivers process FDB notifications from the underlying
device they resolve the netdev to which the entry points to and notify
the bridge using the switchdev notifier.

However, since the RTNL mutex is not held there is nothing preventing
the netdev from disappearing in the middle, which will cause
br_switchdev_event() to dereference a non-existing netdev.

Make switchdev drivers hold the lock at the beginning of the
notification processing session and release it once it ends, after
notifying the bridge.

Also, remove switchdev_mutex and fdb_lock, as they are no longer needed
when RTNL mutex is held.

Fixes: 03bf0c2812 ("switchdev: introduce switchdev notifier")
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
History 2016-03-04 10:25:47 -05:00
..
netfilter Revert "netfilter: ensure number of counters is >0 in do_replace()" 2015-06-01 19:45:47 +02:00
br.c switchdev: Require RTNL mutex to be held when sending FDB notifications 2016-03-04 10:25:47 -05:00
br_device.c bridge: fix lockdep addr_list_lock false positive splat 2016-01-31 11:23:37 -08:00
br_fdb.c bridge: disable softirqs around br_fdb_update to avoid lockup 2015-06-07 19:44:13 -07:00
br_forward.c bridge: fix potential crash in __netdev_pick_tx() 2015-09-29 19:26:21 +02:00
br_if.c bridge: reset bridge mtu after deleting an interface 2015-03-14 19:12:38 -04:00
br_input.c netfilter: Pass socket pointer down through okfn(). 2015-04-07 15:25:55 -04:00
br_ioctl.c bridge: fix br_stp_set_bridge_priority race conditions 2015-07-10 09:49:28 -07:00
br_mdb.c bridge: mdb: fix double add notification 2015-09-29 19:26:22 +02:00
br_multicast.c bridge: fix igmpv3 / mldv2 report parsing 2015-10-03 13:49:15 +02:00
br_netfilter.c Revert "netfilter: bridge: query conntrack about skb dnat" 2015-05-20 13:51:25 +02:00
br_netlink.c bridge: netlink: account for the IFLA_BRPORT_PROXYARP_WIFI attribute size and policy 2015-09-29 19:26:25 +02:00
br_nf_core.c net: Remove protocol from struct dst_ops 2015-03-09 16:06:10 -04:00
br_private.h bridge/nl: remove wrong use of NLM_F_MULTI 2015-04-29 14:59:16 -04:00
br_private_stp.h net: 8021q/bluetooth/bridge/can/ceph: Remove extern from function prototypes 2013-10-19 19:12:11 -04:00
br_stp.c bridge: call netdev_sw_port_stp_update when bridge port STP status changes 2014-12-02 20:01:22 -08:00
br_stp_bpdu.c netfilter: Pass socket pointer down through okfn(). 2015-04-07 15:25:55 -04:00
br_stp_if.c bridge: Only call /sbin/bridge-stp for the initial network namespace 2016-01-31 11:23:36 -08:00
br_stp_timer.c bridge: fix lockdep splat 2015-05-22 16:23:56 -04:00
br_sysfs_br.c bridge: Add a default_pvid sysfs attribute 2014-10-05 21:21:36 -04:00
br_sysfs_if.c bridge: Extend Proxy ARP design to allow optional rules for Wi-Fi 2015-03-05 14:52:23 -05:00
br_vlan.c net: rename vlan_tx_* helpers since "tx" is misleading there 2015-01-13 17:51:08 -05:00
Kconfig bridge: Add vlan filtering infrastructure 2013-02-13 19:41:46 -05:00
Makefile netfilter: bridge: build br_nf_core only if required 2014-09-30 14:07:51 -04:00