瀏覽代碼

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 <[email protected]>
Petr Štetiar 2 年之前
父節點
當前提交
38c7cf0e69

+ 3 - 2
package/kernel/qca-nss-dp/patches/0013-nss_dp_main-Use-a-phy-handle-property-to-connect-to-.patch

@@ -155,11 +155,12 @@ Signed-off-by: Alexandru Gagniuc <[email protected]>
 -		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)) {
--			netdev_dbg(netdev, "failed to connect to phy device\n");
++		if (!(dp_priv->phydev)) {
 +			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;
  		}
  		}