mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-01 19:34:35 +08:00
mlxsw: spectrum: Protect driver from buggy firmware
When processing port up/down events generated by the device's firmware,
the driver protects itself from events reported for non-existent local
ports, but not the CPU port (local port 0), which exists, but lacks a
netdev.
This can result in a NULL pointer dereference when calling
netif_carrier_{on,off}().
Fix this by bailing early when processing an event reported for the CPU
port. Problem was only observed when running on top of a buggy emulator.
Fixes: 28b1987ef5
("mlxsw: spectrum: Register CPU port with devlink")
Signed-off-by: Amit Cohen <amcohen@nvidia.com>
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ce4995bc6c
commit
63b08b1f68
@ -2153,7 +2153,7 @@ static void mlxsw_sp_pude_event_func(const struct mlxsw_reg_info *reg,
|
|||||||
max_ports = mlxsw_core_max_ports(mlxsw_sp->core);
|
max_ports = mlxsw_core_max_ports(mlxsw_sp->core);
|
||||||
local_port = mlxsw_reg_pude_local_port_get(pude_pl);
|
local_port = mlxsw_reg_pude_local_port_get(pude_pl);
|
||||||
|
|
||||||
if (WARN_ON_ONCE(local_port >= max_ports))
|
if (WARN_ON_ONCE(!local_port || local_port >= max_ports))
|
||||||
return;
|
return;
|
||||||
mlxsw_sp_port = mlxsw_sp->ports[local_port];
|
mlxsw_sp_port = mlxsw_sp->ports[local_port];
|
||||||
if (!mlxsw_sp_port)
|
if (!mlxsw_sp_port)
|
||||||
|
Loading…
Reference in New Issue
Block a user