lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <20190214131143.GA12064@splinter> Date: Thu, 14 Feb 2019 13:11:46 +0000 From: Ido Schimmel <idosch@...lanox.com> To: Florian Fainelli <f.fainelli@...il.com> CC: "netdev@...r.kernel.org" <netdev@...r.kernel.org>, "David S. Miller" <davem@...emloft.net>, open list <linux-kernel@...r.kernel.org>, "open list:STAGING SUBSYSTEM" <devel@...verdev.osuosl.org>, "moderated list:ETHERNET BRIDGE" <bridge@...ts.linux-foundation.org>, Jiri Pirko <jiri@...lanox.com>, "andrew@...n.ch" <andrew@...n.ch>, "vivien.didelot@...il.com" <vivien.didelot@...il.com> Subject: Re: [PATCH net-next 3/9] mlxsw: spectrum: Check bridge flags during prepare phase On Wed, Feb 13, 2019 at 02:06:32PM -0800, Florian Fainelli wrote: > In preparation for getting rid of switchdev_port_attr_get(), have mlxsw > check for the bridge flags being set through switchdev_port_attr_set() > when the SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS attribute identifier is > used. > > Signed-off-by: Florian Fainelli <f.fainelli@...il.com> > --- > .../ethernet/mellanox/mlxsw/spectrum_switchdev.c | 14 +++++++++++--- > 1 file changed, 11 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c > index 1f492b7dbea8..7616eab50035 100644 > --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c > +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c > @@ -598,13 +598,17 @@ mlxsw_sp_bridge_port_learning_set(struct mlxsw_sp_port *mlxsw_sp_port, > static int mlxsw_sp_port_attr_br_flags_set(struct mlxsw_sp_port *mlxsw_sp_port, > struct switchdev_trans *trans, > struct net_device *orig_dev, > - unsigned long brport_flags) > + unsigned long brport_flags, > + bool pre_set) > { > struct mlxsw_sp_bridge_port *bridge_port; > int err; > > - if (switchdev_trans_ph_prepare(trans)) > + if (switchdev_trans_ph_prepare(trans) && pre_set) { > + if (brport_flags & ~(BR_LEARNING | BR_FLOOD | BR_MCAST_FLOOD)) > + return -EOPNOTSUPP; > return 0; > + } When we get SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS we only want to perform a check. With this code in case it's not prepare phase, then we continue to set the flags. Better do: if (pre_set) { if (switchdev_trans_ph_commit(trans)) return 0; // perform check here } > > bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp_port->mlxsw_sp->bridge, > orig_dev); > @@ -833,6 +837,7 @@ static int mlxsw_sp_port_attr_set(struct net_device *dev, > struct switchdev_trans *trans) > { > struct mlxsw_sp_port *mlxsw_sp_port = netdev_priv(dev); > + bool pre_set = false; > int err; > > switch (attr->id) { > @@ -841,10 +846,13 @@ static int mlxsw_sp_port_attr_set(struct net_device *dev, > attr->orig_dev, > attr->u.stp_state); > break; > + case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS: > + pre_set = true; /* fall through */ > case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS: > err = mlxsw_sp_port_attr_br_flags_set(mlxsw_sp_port, trans, > attr->orig_dev, > - attr->u.brport_flags); > + attr->u.brport_flags, > + pre_set); > break; > case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME: > err = mlxsw_sp_port_attr_br_ageing_set(mlxsw_sp_port, trans, > -- > 2.17.1 >
Powered by blists - more mailing lists