Message ID | 20241213123657.401868-1-daniel@iogearbox.net (mailing list archive) |
---|---|
State | Accepted |
Commit | e78c20f327bd94dabac68b98218dff069a8780f0 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] team: Fix feature exposure when no ports are present | expand |
On 12/13/24 14:36, Daniel Borkmann wrote: > Small follow-up to align this to an equivalent behavior as the bond driver. > The change in 3625920b62c3 ("teaming: fix vlan_features computing") removed > the netdevice vlan_features when there is no team port attached, yet it > leaves the full set of enc_features intact. > > Instead, leave the default features as pre 3625920b62c3, and recompute once > we do have ports attached. Also, similarly as in bonding case, call the > netdev_base_features() helper on the enc_features. > > Fixes: 3625920b62c3 ("teaming: fix vlan_features computing") > Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> > --- > drivers/net/team/team_core.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/team/team_core.c b/drivers/net/team/team_core.c > index 69ea2c3c76bf..c7690adec8db 100644 > --- a/drivers/net/team/team_core.c > +++ b/drivers/net/team/team_core.c > @@ -998,9 +998,13 @@ static void __team_compute_features(struct team *team) > unsigned int dst_release_flag = IFF_XMIT_DST_RELEASE | > IFF_XMIT_DST_RELEASE_PERM; > > + rcu_read_lock(); > + if (list_empty(&team->port_list)) > + goto done; > + > vlan_features = netdev_base_features(vlan_features); > + enc_features = netdev_base_features(enc_features); > > - rcu_read_lock(); > list_for_each_entry_rcu(port, &team->port_list, list) { > vlan_features = netdev_increment_features(vlan_features, > port->dev->vlan_features, > @@ -1010,11 +1014,11 @@ static void __team_compute_features(struct team *team) > port->dev->hw_enc_features, > TEAM_ENC_FEATURES); > > - > dst_release_flag &= port->dev->priv_flags; > if (port->dev->hard_header_len > max_hard_header_len) > max_hard_header_len = port->dev->hard_header_len; > } > +done: > rcu_read_unlock(); > > team->dev->vlan_features = vlan_features; Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org>
Hello: This patch was applied to netdev/net.git (main) by Jakub Kicinski <kuba@kernel.org>: On Fri, 13 Dec 2024 13:36:57 +0100 you wrote: > Small follow-up to align this to an equivalent behavior as the bond driver. > The change in 3625920b62c3 ("teaming: fix vlan_features computing") removed > the netdevice vlan_features when there is no team port attached, yet it > leaves the full set of enc_features intact. > > Instead, leave the default features as pre 3625920b62c3, and recompute once > we do have ports attached. Also, similarly as in bonding case, call the > netdev_base_features() helper on the enc_features. > > [...] Here is the summary with links: - [net] team: Fix feature exposure when no ports are present https://git.kernel.org/netdev/net/c/e78c20f327bd You are awesome, thank you!
diff --git a/drivers/net/team/team_core.c b/drivers/net/team/team_core.c index 69ea2c3c76bf..c7690adec8db 100644 --- a/drivers/net/team/team_core.c +++ b/drivers/net/team/team_core.c @@ -998,9 +998,13 @@ static void __team_compute_features(struct team *team) unsigned int dst_release_flag = IFF_XMIT_DST_RELEASE | IFF_XMIT_DST_RELEASE_PERM; + rcu_read_lock(); + if (list_empty(&team->port_list)) + goto done; + vlan_features = netdev_base_features(vlan_features); + enc_features = netdev_base_features(enc_features); - rcu_read_lock(); list_for_each_entry_rcu(port, &team->port_list, list) { vlan_features = netdev_increment_features(vlan_features, port->dev->vlan_features, @@ -1010,11 +1014,11 @@ static void __team_compute_features(struct team *team) port->dev->hw_enc_features, TEAM_ENC_FEATURES); - dst_release_flag &= port->dev->priv_flags; if (port->dev->hard_header_len > max_hard_header_len) max_hard_header_len = port->dev->hard_header_len; } +done: rcu_read_unlock(); team->dev->vlan_features = vlan_features;
Small follow-up to align this to an equivalent behavior as the bond driver. The change in 3625920b62c3 ("teaming: fix vlan_features computing") removed the netdevice vlan_features when there is no team port attached, yet it leaves the full set of enc_features intact. Instead, leave the default features as pre 3625920b62c3, and recompute once we do have ports attached. Also, similarly as in bonding case, call the netdev_base_features() helper on the enc_features. Fixes: 3625920b62c3 ("teaming: fix vlan_features computing") Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> --- drivers/net/team/team_core.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)