summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Vasut <[email protected]>2026-03-25 02:09:05 +0100
committerMarek Vasut <[email protected]>2026-04-04 23:46:31 +0200
commite7b5aee706fa36f20727a59c95da6eb77c8fa8d3 (patch)
treeaa5c2fbb83ce3dcff38bc0881d6ea1b1323f40b8
parent214aababe07de0598bd26ecb0c8fb2e2843ff7d5 (diff)
net: rswitch: Avoid NULL pointer dereference during PHY access
At the very early stage when PHY ID is being auto-detected, the PHY device is not yet instantiated and rswitch_etha .phydev is still NULL. Add missing check for this condition and perform C22 fallback access in this PHY ID auto-detection case. Signed-off-by: Marek Vasut <[email protected]>
-rw-r--r--drivers/net/rswitch.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/net/rswitch.c b/drivers/net/rswitch.c
index 801c22bbdc7..c51908ed8f3 100644
--- a/drivers/net/rswitch.c
+++ b/drivers/net/rswitch.c
@@ -482,7 +482,7 @@ static int rswitch_mii_read_c45(struct mii_dev *miidev, int phyad, int devad, in
/* Access PHY register */
if (devad != MDIO_DEVAD_NONE) /* Definitelly C45 */
val = rswitch_mii_access_c45(etha_mii, true, phyad, devad, regad, 0);
- else if (etha->phydev->is_c45) /* C22 access to C45 PHY */
+ else if (etha->phydev && etha->phydev->is_c45) /* C22 access to C45 PHY */
val = rswitch_mii_access_c45(etha_mii, true, phyad, 1, regad, 0);
else
val = rswitch_mii_access_c22(etha_mii, true, phyad, regad, 0);
@@ -516,7 +516,7 @@ int rswitch_mii_write_c45(struct mii_dev *miidev, int phyad, int devad, int rega
/* Access PHY register */
if (devad != MDIO_DEVAD_NONE) /* Definitelly C45 */
rswitch_mii_access_c45(etha_mii, false, phyad, devad, regad, data);
- else if (etha->phydev->is_c45) /* C22 access to C45 PHY */
+ else if (etha->phydev && etha->phydev->is_c45) /* C22 access to C45 PHY */
rswitch_mii_access_c45(etha_mii, false, phyad, 1, regad, data);
else
rswitch_mii_access_c22(etha_mii, false, phyad, regad, data);