qca-nss-dp: fix oops in nss_dp_probe
authorPetr Štetiar <ynezz@true.cz>
Mon, 29 May 2023 17:27:15 +0000 (19:27 +0200)
committerPetr Štetiar <ynezz@true.cz>
Mon, 5 Jun 2023 06:31:36 +0000 (08:31 +0200)
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>
package/kernel/qca-nss-dp/patches/0013-nss_dp_main-Use-a-phy-handle-property-to-connect-to-.patch

index ba9b8ef26222b352fc768d16c3053be951b43400..276c87adfc52af5e1cf09da2b998e3a8bea15ce1 100644 (file)
@@ -155,11 +155,12 @@ Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
 -              dp_priv->phydev = phy_connect(netdev, phy_id,
 -                              &nss_dp_adjust_link,
 -                              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,
 +                                               &nss_dp_adjust_link, 0,
 +                                               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");
                        goto phy_setup_fail;
                }