Skip to content

Commit 2b0ab72

Browse files
committed
Merge branch 'mlxsw-Couple-of-fixes'
Ido Schimmel says: ==================== mlxsw: Couple of fixes First patch makes sure mlxsw does not ignore user requests to delete FDB entries that were learned by the device. Second patch fixes a use-after-free that can be triggered by requesting a reload via devlink when the previous reload failed. Please consider both patches for stable. They apply cleanly to both 4.18.y and 4.19.y. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
2 parents 6e29464 + a22712a commit 2b0ab72

File tree

2 files changed

+17
-9
lines changed

2 files changed

+17
-9
lines changed

drivers/net/ethernet/mellanox/mlxsw/core.c

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -943,8 +943,8 @@ static int mlxsw_devlink_core_bus_device_reload(struct devlink *devlink,
943943
mlxsw_core->bus,
944944
mlxsw_core->bus_priv, true,
945945
devlink);
946-
if (err)
947-
mlxsw_core->reload_fail = true;
946+
mlxsw_core->reload_fail = !!err;
947+
948948
return err;
949949
}
950950

@@ -1083,8 +1083,15 @@ void mlxsw_core_bus_device_unregister(struct mlxsw_core *mlxsw_core,
10831083
{
10841084
struct devlink *devlink = priv_to_devlink(mlxsw_core);
10851085

1086-
if (mlxsw_core->reload_fail)
1087-
goto reload_fail;
1086+
if (mlxsw_core->reload_fail) {
1087+
if (!reload)
1088+
/* Only the parts that were not de-initialized in the
1089+
* failed reload attempt need to be de-initialized.
1090+
*/
1091+
goto reload_fail_deinit;
1092+
else
1093+
return;
1094+
}
10881095

10891096
if (mlxsw_core->driver->fini)
10901097
mlxsw_core->driver->fini(mlxsw_core);
@@ -1098,9 +1105,12 @@ void mlxsw_core_bus_device_unregister(struct mlxsw_core *mlxsw_core,
10981105
if (!reload)
10991106
devlink_resources_unregister(devlink, NULL);
11001107
mlxsw_core->bus->fini(mlxsw_core->bus_priv);
1101-
if (reload)
1102-
return;
1103-
reload_fail:
1108+
1109+
return;
1110+
1111+
reload_fail_deinit:
1112+
devlink_unregister(devlink);
1113+
devlink_resources_unregister(devlink, NULL);
11041114
devlink_free(devlink);
11051115
}
11061116
EXPORT_SYMBOL(mlxsw_core_bus_device_unregister);

drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2661,8 +2661,6 @@ static void mlxsw_sp_switchdev_bridge_fdb_event_work(struct work_struct *work)
26612661
break;
26622662
case SWITCHDEV_FDB_DEL_TO_DEVICE:
26632663
fdb_info = &switchdev_work->fdb_info;
2664-
if (!fdb_info->added_by_user)
2665-
break;
26662664
mlxsw_sp_port_fdb_set(mlxsw_sp_port, fdb_info, false);
26672665
break;
26682666
case SWITCHDEV_FDB_ADD_TO_BRIDGE: /* fall through */

0 commit comments

Comments
 (0)