mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
net: phy: microchip_t1: fix NULL pointer dereference in lan887x_phy_init()
The issue was discovered via smatch static analyzer:
make CHECK="smatch -p=kernel" C=2 drivers/net/phy/microchip_t1.o
CHECK scripts/mod/empty.c
DESCEND objtool
CHECK drivers/net/phy/microchip_t1.c
drivers/net/phy/microchip_t1.c:1295 lan887x_phy_init() warn: 'priv->clock' can also be NULL
mchp_rds_ptp_probe() returns NULL when CONFIG_MICROCHIP_PHY_RDS_PTP or
CONFIG_PTP_1588_CLOCK is disabled. However, lan887x_phy_init() only checks
for an error pointer before using the returned clock to configure the
periodic output pin, which can result in a NULL pointer dereference.
Handle the NULL return as PTP being unavailable and skip the event pin
configuration in that case. Smatch no longer reports the NULL dereference
warning after the change.
Cc: stable+noautosel@kernel.org # untested fix to unlikely driver error path
Reviewed-by: Divya Koppera <Divya.Koppera@microchip.com>
Signed-off-by: Henry Hu <huhai@kylinos.cn>
Link: https://patch.msgid.link/20260903113046.163630-1-15815827059@163.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
6f157f39d1
commit
a4050ce7e4
|
|
@ -1285,14 +1285,16 @@ static int lan887x_phy_init(struct phy_device *phydev)
|
|||
if (IS_ERR(priv->clock))
|
||||
return PTR_ERR(priv->clock);
|
||||
|
||||
/* Enable pin mux for EVT */
|
||||
phy_modify_mmd(phydev, MDIO_MMD_VEND1,
|
||||
LAN887X_MX_CHIP_TOP_REG_CONTROL1,
|
||||
LAN887X_MX_CHIP_TOP_REG_CONTROL1_EVT_EN,
|
||||
LAN887X_MX_CHIP_TOP_REG_CONTROL1_EVT_EN);
|
||||
if (priv->clock) {
|
||||
/* Enable pin mux for EVT */
|
||||
phy_modify_mmd(phydev, MDIO_MMD_VEND1,
|
||||
LAN887X_MX_CHIP_TOP_REG_CONTROL1,
|
||||
LAN887X_MX_CHIP_TOP_REG_CONTROL1_EVT_EN,
|
||||
LAN887X_MX_CHIP_TOP_REG_CONTROL1_EVT_EN);
|
||||
|
||||
/* Initialize pin numbers specific to PEROUT */
|
||||
priv->clock->event_pin = 3;
|
||||
/* Initialize pin numbers specific to PEROUT */
|
||||
priv->clock->event_pin = 3;
|
||||
}
|
||||
|
||||
priv->init_done = true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user