qca-nss-dp: fix oops in nss_dp_probe

Currently kernel crashes when of_phy_connect has issues:

 Unable to handle kernel access to user memory outside uaccess routines at virtual address 0000000000000308
 ...
 pc : phy_attached_print+0x28/0x1b0
 lr : phy_attached_info+0x14/0x20
 ...
 Call trace:
  phy_attached_print+0x28/0x1b0
  phy_attached_info+0x14/0x20
  nss_dp_adjust_link+0x544/0x6c4 [qca_nss_dp]

of_phy_connect returns either pointer or NULL, so can't be checked with
IS_ERR macro.

Signed-off-by: Petr Štetiar <ynezz@true.cz>
This commit is contained in:
Petr Štetiar 2023-05-29 19:27:15 +02:00
parent b6e0a24c49
commit 38c7cf0e69
No known key found for this signature in database
GPG Key ID: 58EE120F30CC02D3

View File

@ -155,11 +155,12 @@ Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
- dp_priv->phydev = phy_connect(netdev, phy_id, - dp_priv->phydev = phy_connect(netdev, phy_id,
- &nss_dp_adjust_link, - &nss_dp_adjust_link,
- dp_priv->phy_mii_type); - dp_priv->phy_mii_type);
- if (IS_ERR(dp_priv->phydev)) {
- netdev_dbg(netdev, "failed to connect to phy device\n");
+ dp_priv->phydev = of_phy_connect(netdev, dp_priv->phy_node, + dp_priv->phydev = of_phy_connect(netdev, dp_priv->phy_node,
+ &nss_dp_adjust_link, 0, + &nss_dp_adjust_link, 0,
+ dp_priv->phy_mii_type); + dp_priv->phy_mii_type);
if (IS_ERR(dp_priv->phydev)) { + if (!(dp_priv->phydev)) {
- netdev_dbg(netdev, "failed to connect to phy device\n");
+ dev_err(&pdev->dev, "Could not attach to PHY\n"); + dev_err(&pdev->dev, "Could not attach to PHY\n");
goto phy_setup_fail; goto phy_setup_fail;
} }