All of lore.kernel.org
 help / color / mirror / Atom feed
From: "SZ Lin (林上智)" <sz.lin@moxa.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: stable@vger.kernel.org
Subject: Re: request for 4.4-stable: d733f7542ad4 ("drivers: net: cpsw: fix segfault in case of bad phy-handle")
Date: Thu, 20 Sep 2018 17:46:31 +0800	[thread overview]
Message-ID: <20180920094631.GA1191@localhost> (raw)
In-Reply-To: <20180917112911.GA28147@kroah.com>

[-- Attachment #1: Type: text/plain, Size: 770 bytes --]

Hi Greg,

On Mon, Sep 17, 2018 at 01:29:11PM +0200, Greg Kroah-Hartman wrote:
> On Fri, Sep 14, 2018 at 11:24:42PM +0800, SZ Lin (林上智) wrote:
> > Hi Greg,
> > 
> > This patch is not marked for 4.4-stable, but it's already in 4.9 and 4.14 stable.
> > 
> > Please apply to 4.4-stable.
> > 
> > This patch adds error handling to avoid segfault situation, I've tweaked
> > patch to use original print function of dev_info() instead of phy_attached_info()
> > which is in commit 2220943a21e26d97d7fd8f83c004b947326b469d upstream.
> 
> This patch does not apply against the latest 4.4.y tree.  Can you please
> rebase/refresh it and resend?

I've rebased the attached patch based on 4.4.157, please apply it.

Thanks.

> 
> thanks,
> 
> greg k-h

-- 
SZ Lin (林上智)

[-- Attachment #2: 0001-drivers-net-cpsw-fix-segfault-in-case-of-bad-phy-han.patch --]
[-- Type: text/x-diff, Size: 3116 bytes --]

>From 76aa771afa9068449b4c1974bcb63e188d6bc180 Mon Sep 17 00:00:00 2001
From: David Rivshin <drivshin@allworx.com>
Date: Wed, 27 Apr 2016 21:32:31 -0400
Subject: [PATCH] drivers: net: cpsw: fix segfault in case of bad phy-handle

commit d733f7542ad47cf73e033c90cf55158587e1d060 upstream

If an emac node has a phy-handle property that points to something
which is not a phy, then a segmentation fault will occur when the
interface is brought up. This is because while phy_connect() will
return ERR_PTR() on failure, of_phy_connect() will return NULL.
The common error check uses IS_ERR(), and so missed when
of_phy_connect() fails. The NULL pointer is then dereferenced.

Also, the common error message referenced slave->data->phy_id,
which would be empty in the case of phy-handle. Instead, use the
name of the device_node as a useful identifier. And in the phy_id
case add the error code for completeness.

Fixes: 9e42f715264f ("drivers: net: cpsw: add phy-handle parsing")
Signed-off-by: David Rivshin <drivshin@allworx.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
[SZ Lin (林上智): Tweak the patch to use original print function of dev_info()]
Signed-off-by: SZ Lin (林上智) <sz.lin@moxa.com>
---
 drivers/net/ethernet/ti/cpsw.c | 37 +++++++++++++++++++++-------------
 1 file changed, 23 insertions(+), 14 deletions(-)

diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index c2e110b2549b..c1217a87d535 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -1164,25 +1164,34 @@ static void cpsw_slave_open(struct cpsw_slave *slave, struct cpsw_priv *priv)
 		cpsw_ale_add_mcast(priv->ale, priv->ndev->broadcast,
 				   1 << slave_port, 0, 0, ALE_MCAST_FWD_2);
 
-	if (slave->data->phy_node)
+	if (slave->data->phy_node) {
 		slave->phy = of_phy_connect(priv->ndev, slave->data->phy_node,
 				 &cpsw_adjust_link, 0, slave->data->phy_if);
-	else
+		if (!slave->phy) {
+			dev_err(priv->dev, "phy \"%s\" not found on slave %d\n",
+				slave->data->phy_node->full_name,
+				slave->slave_num);
+			return;
+		}
+	} else {
 		slave->phy = phy_connect(priv->ndev, slave->data->phy_id,
 				 &cpsw_adjust_link, slave->data->phy_if);
-	if (IS_ERR(slave->phy)) {
-		dev_err(priv->dev, "phy %s not found on slave %d\n",
-			slave->data->phy_id, slave->slave_num);
-		slave->phy = NULL;
-	} else {
-		dev_info(priv->dev, "phy found : id is : 0x%x\n",
-			 slave->phy->phy_id);
-		phy_start(slave->phy);
-
-		/* Configure GMII_SEL register */
-		cpsw_phy_sel(&priv->pdev->dev, slave->phy->interface,
-			     slave->slave_num);
+		if (IS_ERR(slave->phy)) {
+			dev_err(priv->dev,
+				"phy \"%s\" not found on slave %d, err %ld\n",
+				slave->data->phy_id, slave->slave_num,
+				PTR_ERR(slave->phy));
+			slave->phy = NULL;
+			return;
+		}
 	}
+
+	dev_info(priv->dev, "phy found : id is : 0x%x\n", slave->phy->phy_id);
+
+	phy_start(slave->phy);
+
+	/* Configure GMII_SEL register */
+	cpsw_phy_sel(&priv->pdev->dev, slave->phy->interface, slave->slave_num);
 }
 
 static inline void cpsw_add_default_vlan(struct cpsw_priv *priv)
-- 
2.19.0


  reply	other threads:[~2018-09-20 15:29 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-14 15:24 request for 4.4-stable: d733f7542ad4 ("drivers: net: cpsw: fix segfault in case of bad phy-handle") SZ Lin (林上智)
2018-09-17 11:29 ` Greg Kroah-Hartman
2018-09-20  9:46   ` SZ Lin (林上智) [this message]
2018-09-24 10:56     ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180920094631.GA1191@localhost \
    --to=sz.lin@moxa.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.