linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] net: dsa: mt7530: fix null pointer dereferencing in port5 setup
@ 2020-04-03 11:28 Chuanhong Guo
  2020-04-03 17:03 ` Vivien Didelot
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Chuanhong Guo @ 2020-04-03 11:28 UTC (permalink / raw)
  To: netdev
  Cc: Chuanhong Guo, stable, Sean Wang, Andrew Lunn, Vivien Didelot,
	Florian Fainelli, David S. Miller, Matthias Brugger,
	René van Dorst, Russell King, linux-arm-kernel,
	linux-mediatek, linux-kernel

The 2nd gmac of mediatek soc ethernet may not be connected to a PHY
and a phy-handle isn't always available.
Unfortunately, mt7530 dsa driver assumes that the 2nd gmac is always
connected to switch port 5 and setup mt7530 according to phy address
of 2nd gmac node, causing null pointer dereferencing when phy-handle
isn't defined in dts.
This commit fix this setup code by checking return value of
of_parse_phandle before using it.

Fixes: 38f790a80560 ("net: dsa: mt7530: Add support for port 5")
Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
Cc: stable@vger.kernel.org
---

mt7530 is available as a standalone chip and we should not make it
tightly coupled with a specific type of ethernet dt binding in the
first place.
A proper fix is to replace this port detection logic with a dt
property under mt7530 node, but that's too much for linux-stable.

 drivers/net/dsa/mt7530.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c
index 6e91fe2f4b9a..1d53a4ebcd5a 100644
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -1414,6 +1414,9 @@ mt7530_setup(struct dsa_switch *ds)
 				continue;
 
 			phy_node = of_parse_phandle(mac_np, "phy-handle", 0);
+			if (!phy_node)
+				continue;
+
 			if (phy_node->parent == priv->dev->of_node->parent) {
 				ret = of_get_phy_mode(mac_np, &interface);
 				if (ret && ret != -ENODEV)
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] net: dsa: mt7530: fix null pointer dereferencing in port5 setup
  2020-04-03 11:28 [PATCH] net: dsa: mt7530: fix null pointer dereferencing in port5 setup Chuanhong Guo
@ 2020-04-03 17:03 ` Vivien Didelot
  2020-04-03 17:43 ` Florian Fainelli
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 9+ messages in thread
From: Vivien Didelot @ 2020-04-03 17:03 UTC (permalink / raw)
  To: Chuanhong Guo
  Cc: netdev, Chuanhong Guo, stable, Sean Wang, Andrew Lunn,
	Florian Fainelli, David S. Miller, Matthias Brugger,
	René van Dorst, Russell King, linux-arm-kernel,
	linux-mediatek, linux-kernel

On Fri,  3 Apr 2020 19:28:24 +0800, Chuanhong Guo <gch981213@gmail.com> wrote:
> The 2nd gmac of mediatek soc ethernet may not be connected to a PHY
> and a phy-handle isn't always available.
> Unfortunately, mt7530 dsa driver assumes that the 2nd gmac is always
> connected to switch port 5 and setup mt7530 according to phy address
> of 2nd gmac node, causing null pointer dereferencing when phy-handle
> isn't defined in dts.
> This commit fix this setup code by checking return value of
> of_parse_phandle before using it.
> 
> Fixes: 38f790a80560 ("net: dsa: mt7530: Add support for port 5")
> Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
> Cc: stable@vger.kernel.org

Reviewed-by: Vivien Didelot <vivien.didelot@gmail.com>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] net: dsa: mt7530: fix null pointer dereferencing in port5 setup
  2020-04-03 11:28 [PATCH] net: dsa: mt7530: fix null pointer dereferencing in port5 setup Chuanhong Guo
  2020-04-03 17:03 ` Vivien Didelot
@ 2020-04-03 17:43 ` Florian Fainelli
  2020-04-03 18:09 ` René van Dorst
  2020-04-03 23:11 ` David Miller
  3 siblings, 0 replies; 9+ messages in thread
From: Florian Fainelli @ 2020-04-03 17:43 UTC (permalink / raw)
  To: Chuanhong Guo, netdev
  Cc: stable, Sean Wang, Andrew Lunn, Vivien Didelot, David S. Miller,
	Matthias Brugger, René van Dorst, Russell King,
	linux-arm-kernel, linux-mediatek, linux-kernel



On 4/3/2020 4:28 AM, Chuanhong Guo wrote:
> The 2nd gmac of mediatek soc ethernet may not be connected to a PHY
> and a phy-handle isn't always available.
> Unfortunately, mt7530 dsa driver assumes that the 2nd gmac is always
> connected to switch port 5 and setup mt7530 according to phy address
> of 2nd gmac node, causing null pointer dereferencing when phy-handle
> isn't defined in dts.
> This commit fix this setup code by checking return value of
> of_parse_phandle before using it.
> 
> Fixes: 38f790a80560 ("net: dsa: mt7530: Add support for port 5")
> Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
> Cc: stable@vger.kernel.org

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>

> ---
> 
> mt7530 is available as a standalone chip and we should not make it
> tightly coupled with a specific type of ethernet dt binding in the
> first place.
> A proper fix is to replace this port detection logic with a dt
> property under mt7530 node, but that's too much for linux-stable.

Agree, one would also wonder why the driver needs to parse parts of the
Device Tree which should be done by the core DSA layer.
-- 
Florian

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] net: dsa: mt7530: fix null pointer dereferencing in port5 setup
  2020-04-03 11:28 [PATCH] net: dsa: mt7530: fix null pointer dereferencing in port5 setup Chuanhong Guo
  2020-04-03 17:03 ` Vivien Didelot
  2020-04-03 17:43 ` Florian Fainelli
@ 2020-04-03 18:09 ` René van Dorst
  2020-04-04  3:19   ` Chuanhong Guo
  2020-04-03 23:11 ` David Miller
  3 siblings, 1 reply; 9+ messages in thread
From: René van Dorst @ 2020-04-03 18:09 UTC (permalink / raw)
  To: Chuanhong Guo
  Cc: netdev, stable, Sean Wang, Andrew Lunn, Vivien Didelot,
	Florian Fainelli, David S. Miller, Matthias Brugger,
	Russell King, linux-arm-kernel, linux-mediatek, linux-kernel

Quoting Chuanhong Guo <gch981213@gmail.com>:

Hi Chuanhong,

> The 2nd gmac of mediatek soc ethernet may not be connected to a PHY
> and a phy-handle isn't always available.
> Unfortunately, mt7530 dsa driver assumes that the 2nd gmac is always
> connected to switch port 5 and setup mt7530 according to phy address
> of 2nd gmac node, causing null pointer dereferencing when phy-handle
> isn't defined in dts.

MT7530 tries to detect if 2nd GMAC is using a phy with phy-address 0 or 4.
If so, switch port 5 needs to be setup so that PHY 0 or 4 is available
via port 5 of the switch. Any MAC can talk to PHY 0/4 directly via port 5.
This is also explained in the kernel docs mt7530.txt.

May be there are better way to detect that any node is using phy 0/4 of
the switch.

Funny that I never tested this case that 2nd gmac node exits and is disabled
without using port 5.

Thanks for the fix.

Tested-by: René van Dorst <opensource@vdorst.com>

Greats,

René

> This commit fix this setup code by checking return value of
> of_parse_phandle before using it.
>
> Fixes: 38f790a80560 ("net: dsa: mt7530: Add support for port 5")
> Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
> Cc: stable@vger.kernel.org
> ---
>
> mt7530 is available as a standalone chip and we should not make it
> tightly coupled with a specific type of ethernet dt binding in the
> first place.
> A proper fix is to replace this port detection logic with a dt
> property under mt7530 node, but that's too much for linux-stable.
>
>  drivers/net/dsa/mt7530.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c
> index 6e91fe2f4b9a..1d53a4ebcd5a 100644
> --- a/drivers/net/dsa/mt7530.c
> +++ b/drivers/net/dsa/mt7530.c
> @@ -1414,6 +1414,9 @@ mt7530_setup(struct dsa_switch *ds)
>  				continue;
>
>  			phy_node = of_parse_phandle(mac_np, "phy-handle", 0);
> +			if (!phy_node)
> +				continue;
> +
>  			if (phy_node->parent == priv->dev->of_node->parent) {
>  				ret = of_get_phy_mode(mac_np, &interface);
>  				if (ret && ret != -ENODEV)
> --
> 2.25.1




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] net: dsa: mt7530: fix null pointer dereferencing in port5 setup
  2020-04-03 11:28 [PATCH] net: dsa: mt7530: fix null pointer dereferencing in port5 setup Chuanhong Guo
                   ` (2 preceding siblings ...)
  2020-04-03 18:09 ` René van Dorst
@ 2020-04-03 23:11 ` David Miller
  2020-04-04  3:37   ` Chuanhong Guo
  3 siblings, 1 reply; 9+ messages in thread
From: David Miller @ 2020-04-03 23:11 UTC (permalink / raw)
  To: gch981213
  Cc: netdev, stable, sean.wang, andrew, vivien.didelot, f.fainelli,
	matthias.bgg, opensource, rmk+kernel, linux-arm-kernel,
	linux-mediatek, linux-kernel

From: Chuanhong Guo <gch981213@gmail.com>
Date: Fri,  3 Apr 2020 19:28:24 +0800

> The 2nd gmac of mediatek soc ethernet may not be connected to a PHY
> and a phy-handle isn't always available.
> Unfortunately, mt7530 dsa driver assumes that the 2nd gmac is always
> connected to switch port 5 and setup mt7530 according to phy address
> of 2nd gmac node, causing null pointer dereferencing when phy-handle
> isn't defined in dts.
> This commit fix this setup code by checking return value of
> of_parse_phandle before using it.
> 
> Fixes: 38f790a80560 ("net: dsa: mt7530: Add support for port 5")
> Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
> Cc: stable@vger.kernel.org

Please do not CC: stable for networking changes, as per:

	Documentation/networking/netdev-FAQ.rstq

Applied and queued up for -stable, thank you.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] net: dsa: mt7530: fix null pointer dereferencing in port5 setup
  2020-04-03 18:09 ` René van Dorst
@ 2020-04-04  3:19   ` Chuanhong Guo
  2020-04-04 15:08     ` Andrew Lunn
  0 siblings, 1 reply; 9+ messages in thread
From: Chuanhong Guo @ 2020-04-04  3:19 UTC (permalink / raw)
  To: René van Dorst
  Cc: netdev, stable, Sean Wang, Andrew Lunn, Vivien Didelot,
	Florian Fainelli, David S. Miller, Matthias Brugger,
	Russell King, moderated list:ARM/Mediatek SoC support,
	linux-mediatek, open list

Hi!

On Sat, Apr 4, 2020 at 2:09 AM René van Dorst <opensource@vdorst.com> wrote:
>
> Quoting Chuanhong Guo <gch981213@gmail.com>:
>
> Hi Chuanhong,
>
> > The 2nd gmac of mediatek soc ethernet may not be connected to a PHY
> > and a phy-handle isn't always available.
> > Unfortunately, mt7530 dsa driver assumes that the 2nd gmac is always
> > connected to switch port 5 and setup mt7530 according to phy address
> > of 2nd gmac node, causing null pointer dereferencing when phy-handle
> > isn't defined in dts.
>
> MT7530 tries to detect if 2nd GMAC is using a phy with phy-address 0 or 4.

What if the 2nd GMAC connects to an external PHY on address 0 on a
different mdio-bus? This is already happening on mt7629 where the
integrated PHY connected to gmac2 is on address 0 and gmac1
connects to external mt753x switch.
On mt7621, the RGMII2 is always wired to switch mac5 as well as
external pins, and one should disable switch mac5 in this case or
there's pin conflict.

> If so, switch port 5 needs to be setup so that PHY 0 or 4 is available
> via port 5 of the switch. Any MAC can talk to PHY 0/4 directly via port 5.
> This is also explained in the kernel docs mt7530.txt.
>
> May be there are better way to detect that any node is using phy 0/4 of
> the switch.

It should never be detected. This piece of code is to configure how
RGMII2 on mt7530 is wired: PHY0/PHY4/switch MAC5/off. And it
should be implemented as a configurable dt property. We should
not make assumption that 2 RGMIIs always connected to the two
macs on mtk_eth_soc and we should never parse parent eth dts
in DSA driver.

-- 
Regards,
Chuanhong Guo

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] net: dsa: mt7530: fix null pointer dereferencing in port5 setup
  2020-04-03 23:11 ` David Miller
@ 2020-04-04  3:37   ` Chuanhong Guo
  0 siblings, 0 replies; 9+ messages in thread
From: Chuanhong Guo @ 2020-04-04  3:37 UTC (permalink / raw)
  To: David Miller
  Cc: netdev, stable, Sean Wang, Andrew Lunn, Vivien Didelot,
	Florian Fainelli, Matthias Brugger, René van Dorst,
	Russell King, moderated list:ARM/Mediatek SoC support,
	linux-mediatek, open list

Hi!

On Sat, Apr 4, 2020 at 7:11 AM David Miller <davem@davemloft.net> wrote:
> > Cc: stable@vger.kernel.org
>
> Please do not CC: stable for networking changes, as per:
>
>         Documentation/networking/netdev-FAQ.rstq

Oh! I'm not aware of this doc. Thanks for pointing it out.

-- 
Regards,
Chuanhong Guo

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] net: dsa: mt7530: fix null pointer dereferencing in port5 setup
  2020-04-04  3:19   ` Chuanhong Guo
@ 2020-04-04 15:08     ` Andrew Lunn
  2020-04-04 15:34       ` Chuanhong Guo
  0 siblings, 1 reply; 9+ messages in thread
From: Andrew Lunn @ 2020-04-04 15:08 UTC (permalink / raw)
  To: Chuanhong Guo
  Cc: René van Dorst, netdev, stable, Sean Wang, Vivien Didelot,
	Florian Fainelli, David S. Miller, Matthias Brugger,
	Russell King, moderated list:ARM/Mediatek SoC support,
	linux-mediatek, open list

On Sat, Apr 04, 2020 at 11:19:10AM +0800, Chuanhong Guo wrote:
> Hi!
> 
> On Sat, Apr 4, 2020 at 2:09 AM René van Dorst <opensource@vdorst.com> wrote:
> >
> > Quoting Chuanhong Guo <gch981213@gmail.com>:
> >
> > Hi Chuanhong,
> >
> > > The 2nd gmac of mediatek soc ethernet may not be connected to a PHY
> > > and a phy-handle isn't always available.
> > > Unfortunately, mt7530 dsa driver assumes that the 2nd gmac is always
> > > connected to switch port 5 and setup mt7530 according to phy address
> > > of 2nd gmac node, causing null pointer dereferencing when phy-handle
> > > isn't defined in dts.
> >
> > MT7530 tries to detect if 2nd GMAC is using a phy with phy-address 0 or 4.
> 
> What if the 2nd GMAC connects to an external PHY on address 0 on a
> different mdio-bus?

In general, you using a phy-handle to cover such a situation. If there
is a phy-handle, just use it.

   Andrew

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] net: dsa: mt7530: fix null pointer dereferencing in port5 setup
  2020-04-04 15:08     ` Andrew Lunn
@ 2020-04-04 15:34       ` Chuanhong Guo
  0 siblings, 0 replies; 9+ messages in thread
From: Chuanhong Guo @ 2020-04-04 15:34 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: René van Dorst, netdev, stable, Sean Wang, Vivien Didelot,
	Florian Fainelli, David S. Miller, Matthias Brugger,
	Russell King, moderated list:ARM/Mediatek SoC support,
	linux-mediatek, open list

Hi!

On Sat, Apr 4, 2020 at 11:08 PM Andrew Lunn <andrew@lunn.ch> wrote:
> > > MT7530 tries to detect if 2nd GMAC is using a phy with phy-address 0 or 4.
> >
> > What if the 2nd GMAC connects to an external PHY on address 0 on a
> > different mdio-bus?
>
> In general, you using a phy-handle to cover such a situation. If there
> is a phy-handle, just use it.

If it's determining where switch mac5 is wired, a phy-handle is fine.
Here we are determining where exposed rgmii2 pins are wired.
It can be wired to switch mac5 or skip the switch mac completely
and connected to phy0/phy4.
Current driver is determining rgmii2 wiring on mt7530 using phy-handle
on *another unrelated ethernet node* which doesn't sound right.

-- 
Regards,
Chuanhong Guo

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2020-04-04 15:34 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-03 11:28 [PATCH] net: dsa: mt7530: fix null pointer dereferencing in port5 setup Chuanhong Guo
2020-04-03 17:03 ` Vivien Didelot
2020-04-03 17:43 ` Florian Fainelli
2020-04-03 18:09 ` René van Dorst
2020-04-04  3:19   ` Chuanhong Guo
2020-04-04 15:08     ` Andrew Lunn
2020-04-04 15:34       ` Chuanhong Guo
2020-04-03 23:11 ` David Miller
2020-04-04  3:37   ` Chuanhong Guo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).