diff options
| author | Nikolay Aleksandrov <razor@blackwall.org> | 2026-09-03 17:31:36 +0300 |
|---|---|---|
| committer | Jakub Kicinski <kuba@kernel.org> | 2026-09-07 17:26:10 -0700 |
| commit | 120207a08fc093a281e83eb292426249ffcd7512 (patch) | |
| tree | d02619f871e314923e6ffa04bc61b5ab134ded17 | |
| parent | 5bec8f861114a221d774ceb1443078164710537b (diff) | |
| download | linux-next-120207a08fc093a281e83eb292426249ffcd7512.tar.gz linux-next-120207a08fc093a281e83eb292426249ffcd7512.zip | |
net: bridge: vlan: annotate lockless use of msti
Annotate data races around vlan msti field, it can be read lockless.
Signed-off-by: Nikolay Aleksandrov <razor@blackwall.org>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Link: https://patch.msgid.link/20260903143138.1574598-8-razor@blackwall.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
| -rw-r--r-- | net/bridge/br_mst.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/net/bridge/br_mst.c b/net/bridge/br_mst.c index 95e49ec8065e..76a5bf287578 100644 --- a/net/bridge/br_mst.c +++ b/net/bridge/br_mst.c @@ -123,7 +123,7 @@ int br_mst_set_state(struct net_bridge_port *p, u16 msti, u8 state, err = 0; list_for_each_entry_rcu(v, &vg->vlan_list, vlist) { - if (v->brvlan->msti != msti) + if (READ_ONCE(v->brvlan->msti) != msti) continue; br_mst_vlan_set_state(vg, v, state); @@ -176,7 +176,7 @@ int br_mst_vlan_set_msti(struct net_bridge_vlan *mv, u16 msti) if (err && err != -EOPNOTSUPP) return err; - mv->msti = msti; + WRITE_ONCE(mv->msti, msti); list_for_each_entry(p, &mv->br->port_list, list) { vg = nbp_vlan_group(p); @@ -249,7 +249,9 @@ size_t br_mst_info_size(const struct net_bridge_vlan_group *vg) sz = nla_total_size(0); list_for_each_entry_rcu(v, &vg->vlan_list, vlist) { - if (test_bit(v->brvlan->msti, seen)) + u16 msti = READ_ONCE(v->brvlan->msti); + + if (test_bit(msti, seen)) continue; /* IFLA_BRIDGE_MST_ENTRY */ @@ -259,7 +261,7 @@ size_t br_mst_info_size(const struct net_bridge_vlan_group *vg) /* IFLA_BRIDGE_MST_ENTRY_STATE */ nla_total_size(sizeof(u8)); - __set_bit(v->brvlan->msti, seen); + __set_bit(msti, seen); } return sz; |
