On 12/10/24 16:12, Daniel Borkmann wrote: > If a bonding device has slave devices, then the current logic to derive > the feature set for the master bond device is limited in that flags which > are fully supported by the underlying slave devices cannot be propagated > up to vlan devices which sit on top of bond devices. Instead, these get > blindly masked out via current NETIF_F_ALL_FOR_ALL logic. > > vlan_features and mpls_features should reuse netdev_base_features() in > order derive the set in the same way as ndo_fix_features before iterating > through the slave devices to refine the feature set. > > Fixes: a9b3ace44c7d ("bonding: fix vlan_features computing") > Fixes: 2e770b507ccd ("net: bonding: Inherit MPLS features from slave devices") > Signed-off-by: Daniel Borkmann <daniel@xxxxxxxxxxxxx> > Cc: Nikolay Aleksandrov <razor@xxxxxxxxxxxxx> > Cc: Ido Schimmel <idosch@xxxxxxxxxx> > Cc: Jiri Pirko <jiri@xxxxxxxxxx> > --- > drivers/net/bonding/bond_main.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c > index 42c835c60cd8..320dd71392ef 100644 > --- a/drivers/net/bonding/bond_main.c > +++ b/drivers/net/bonding/bond_main.c > @@ -1563,8 +1563,9 @@ static void bond_compute_features(struct bonding *bond) > > if (!bond_has_slaves(bond)) > goto done; > - vlan_features &= NETIF_F_ALL_FOR_ALL; > - mpls_features &= NETIF_F_ALL_FOR_ALL; > + > + vlan_features = netdev_base_features(vlan_features); > + mpls_features = netdev_base_features(mpls_features); > > bond_for_each_slave(bond, slave, iter) { > vlan_features = netdev_increment_features(vlan_features, Reviewed-by: Nikolay Aleksandrov <razor@xxxxxxxxxxxxx>