bridge.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] net: dsa: RCU-protect dsa_ptr in struct net_device
@ 2024-09-10 13:03 A. Sverdlin
  2024-09-10 13:03 ` [PATCH 1/2] " A. Sverdlin
  2024-09-11  2:19 ` [PATCH 0/2] " Jakub Kicinski
  0 siblings, 2 replies; 12+ messages in thread
From: A. Sverdlin @ 2024-09-10 13:03 UTC (permalink / raw)
  To: netdev
  Cc: Alexander Sverdlin, Ar1nç ÜNAL, Daniel Golle,
	DENG Qingfang, Sean Wang, Andrew Lunn, Florian Fainelli,
	Vladimir Oltean, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Matthias Brugger, AngeloGioacchino Del Regno,
	Claudiu Manoil, Alexandre Belloni, UNGLinuxDriver,
	Broadcom internal kernel review list, Lorenzo Bianconi,
	Felix Fietkau, Mark Lee, Roopa Prabhu, Nikolay Aleksandrov,
	linux-mediatek, bridge, Jonathan Corbet, linux-doc

From: Alexander Sverdlin <alexander.sverdlin@siemens.com>

There are multiple races of zeroing dsa_ptr in struct net_device (on
shutdown/remove) against asynchronous dereferences all over the net
code. Widespread pattern is as follows:

CPU0					CPU1
if (netdev_uses_dsa())
					dev->dsa_ptr = NULL;
        dev->dsa_ptr->...

RCU-protect the dsa_ptr and ajust the documentation where unsafe patterns
were mentioned.

The first patch has been compiled with ARCH=arm64 and allyesconfig against
v6.11-rc6. Backported to v6.1 and tested on arm64 HW with LAN9303 switch
(where the issue was initially reproduced), including LOCKDEP and
PROVE_RCU. Therefore I will be able to provide v6.1 backport (for -stable
purposes) and later v6.8 backport as well.

Alexander Sverdlin (2):
  net: dsa: RCU-protect dsa_ptr in struct net_device
  docs: net: dsa: RCU protection of dsa_ptr in struct net_device

 Documentation/networking/dsa/dsa.rst        |  18 ++--
 drivers/net/dsa/mt7530.c                    |   3 +-
 drivers/net/dsa/ocelot/felix.c              |   3 +-
 drivers/net/dsa/qca/qca8k-8xxx.c            |   3 +-
 drivers/net/ethernet/broadcom/bcmsysport.c  |   8 +-
 drivers/net/ethernet/mediatek/airoha_eth.c  |   2 +-
 drivers/net/ethernet/mediatek/mtk_eth_soc.c |  22 +++--
 drivers/net/ethernet/mediatek/mtk_ppe.c     |  15 ++-
 include/linux/netdevice.h                   |   2 +-
 include/net/dsa.h                           |  36 +++++--
 include/net/dsa_stubs.h                     |   6 +-
 net/bridge/br_input.c                       |   2 +-
 net/core/dev.c                              |   3 +-
 net/core/flow_dissector.c                   |  19 ++--
 net/dsa/conduit.c                           |  66 ++++++++-----
 net/dsa/dsa.c                               |  19 ++--
 net/dsa/port.c                              |   3 +-
 net/dsa/tag.c                               |   3 +-
 net/dsa/tag.h                               |  19 ++--
 net/dsa/tag_8021q.c                         |  10 +-
 net/dsa/tag_brcm.c                          |   2 +-
 net/dsa/tag_dsa.c                           |   8 +-
 net/dsa/tag_qca.c                           |  10 +-
 net/dsa/tag_sja1105.c                       |  22 +++--
 net/dsa/user.c                              | 104 +++++++++++---------
 net/ethernet/eth.c                          |   2 +-
 26 files changed, 249 insertions(+), 161 deletions(-)

-- 
2.46.0


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2024-09-17 11:08 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-10 13:03 [PATCH 0/2] net: dsa: RCU-protect dsa_ptr in struct net_device A. Sverdlin
2024-09-10 13:03 ` [PATCH 1/2] " A. Sverdlin
2024-09-10 17:40   ` Florian Fainelli
2024-09-10 20:40     ` Sverdlin, Alexander
2024-09-13 19:03   ` Vladimir Oltean
2024-09-13 19:27     ` Andrew Lunn
2024-09-14  5:56       ` Greg KH
2024-09-17  8:10   ` Gur Stavi
2024-09-17  8:25     ` Sverdlin, Alexander
2024-09-17 10:30       ` Gur Stavi
2024-09-17 11:08         ` Sverdlin, Alexander
2024-09-11  2:19 ` [PATCH 0/2] " Jakub Kicinski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).