mlxsw: spectrum: Guard against invalid local ports
authorAmit Cohen <amcohen@nvidia.com>
Thu, 27 Jan 2022 09:02:25 +0000 (11:02 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 28 Jan 2022 03:19:58 +0000 (19:19 -0800)
commitbcdfd615f83b4bd04678109bf18022d1476e4bbf
treebf2deab99b6519450a618c7bd31ac7efdb8835d7
parent636d3ad238906742ac7bc96f05513327b3aa6e8f
mlxsw: spectrum: Guard against invalid local ports

When processing events generated by the device's firmware, the driver
protects itself from events reported for non-existent local ports, but
not for the CPU port (local port 0), which exists, but does not have all
the fields as any local port.

This can result in a NULL pointer dereference when trying access
'struct mlxsw_sp_port' fields which are not initialized for CPU port.

Commit 63b08b1f6834 ("mlxsw: spectrum: Protect driver from buggy firmware")
already handled such issue by bailing early when processing a PUDE event
reported for the CPU port.

Generalize the approach by moving the check to a common function and
making use of it in all relevant places.

Signed-off-by: Amit Cohen <amcohen@nvidia.com>
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlxsw/spectrum.c
drivers/net/ethernet/mellanox/mlxsw/spectrum.h
drivers/net/ethernet/mellanox/mlxsw/spectrum_ptp.c
drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c