Netdev Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH net-next] net: phy: don't crash in phy_read/_write_mmd without a PHY driver
@ 2020-01-16 17:46 Vladimir Oltean
  2020-01-16 17:48 ` Vladimir Oltean
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Vladimir Oltean @ 2020-01-16 17:46 UTC (permalink / raw)
  To: davem, linux, andrew, f.fainelli, hkallweit1; +Cc: netdev, Alex Marginean

From: Alex Marginean <alexandru.marginean@nxp.com>

The APIs can be used by Ethernet drivers without actually loading a PHY
driver. This may become more widespread in the future with 802.3z
compatible MAC PCS devices being locally driven by the MAC driver when
configuring for a PHY mode with in-band negotiation.

Check that drv is not NULL before reading from it.

Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
---
If this hasn't been reported by now I assume it wasn't an issue so far.
So I've targeted the patch for net-next and not provided a Fixes: tag.

 drivers/net/phy/phy-core.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/phy/phy-core.c b/drivers/net/phy/phy-core.c
index 769a076514b0..a4d2d59fceca 100644
--- a/drivers/net/phy/phy-core.c
+++ b/drivers/net/phy/phy-core.c
@@ -387,7 +387,7 @@ int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum)
 	if (regnum > (u16)~0 || devad > 32)
 		return -EINVAL;
 
-	if (phydev->drv->read_mmd) {
+	if (phydev->drv && phydev->drv->read_mmd) {
 		val = phydev->drv->read_mmd(phydev, devad, regnum);
 	} else if (phydev->is_c45) {
 		u32 addr = MII_ADDR_C45 | (devad << 16) | (regnum & 0xffff);
@@ -444,7 +444,7 @@ int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val)
 	if (regnum > (u16)~0 || devad > 32)
 		return -EINVAL;
 
-	if (phydev->drv->write_mmd) {
+	if (phydev->drv && phydev->drv->write_mmd) {
 		ret = phydev->drv->write_mmd(phydev, devad, regnum, val);
 	} else if (phydev->is_c45) {
 		u32 addr = MII_ADDR_C45 | (devad << 16) | (regnum & 0xffff);
-- 
2.17.1


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

* Re: [PATCH net-next] net: phy: don't crash in phy_read/_write_mmd without a PHY driver
  2020-01-16 17:46 [PATCH net-next] net: phy: don't crash in phy_read/_write_mmd without a PHY driver Vladimir Oltean
@ 2020-01-16 17:48 ` Vladimir Oltean
  2020-01-16 17:52   ` Florian Fainelli
  2020-01-16 20:47 ` Heiner Kallweit
  2020-01-20  9:08 ` David Miller
  2 siblings, 1 reply; 6+ messages in thread
From: Vladimir Oltean @ 2020-01-16 17:48 UTC (permalink / raw)
  To: David S. Miller, Russell King - ARM Linux admin, Andrew Lunn,
	Florian Fainelli, Heiner Kallweit
  Cc: netdev, Alex Marginean

On Thu, 16 Jan 2020 at 19:46, Vladimir Oltean <olteanv@gmail.com> wrote:
>
> From: Alex Marginean <alexandru.marginean@nxp.com>
>
> The APIs can be used by Ethernet drivers without actually loading a PHY
> driver. This may become more widespread in the future with 802.3z
> compatible MAC PCS devices being locally driven by the MAC driver when
> configuring for a PHY mode with in-band negotiation.
>
> Check that drv is not NULL before reading from it.
>
> Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
> ---

Ugh. Can I just add here:

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>

without resending?

> If this hasn't been reported by now I assume it wasn't an issue so far.
> So I've targeted the patch for net-next and not provided a Fixes: tag.
>
>  drivers/net/phy/phy-core.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/phy/phy-core.c b/drivers/net/phy/phy-core.c
> index 769a076514b0..a4d2d59fceca 100644
> --- a/drivers/net/phy/phy-core.c
> +++ b/drivers/net/phy/phy-core.c
> @@ -387,7 +387,7 @@ int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum)
>         if (regnum > (u16)~0 || devad > 32)
>                 return -EINVAL;
>
> -       if (phydev->drv->read_mmd) {
> +       if (phydev->drv && phydev->drv->read_mmd) {
>                 val = phydev->drv->read_mmd(phydev, devad, regnum);
>         } else if (phydev->is_c45) {
>                 u32 addr = MII_ADDR_C45 | (devad << 16) | (regnum & 0xffff);
> @@ -444,7 +444,7 @@ int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val)
>         if (regnum > (u16)~0 || devad > 32)
>                 return -EINVAL;
>
> -       if (phydev->drv->write_mmd) {
> +       if (phydev->drv && phydev->drv->write_mmd) {
>                 ret = phydev->drv->write_mmd(phydev, devad, regnum, val);
>         } else if (phydev->is_c45) {
>                 u32 addr = MII_ADDR_C45 | (devad << 16) | (regnum & 0xffff);
> --
> 2.17.1
>

Sorry,
-Vladimir

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

* Re: [PATCH net-next] net: phy: don't crash in phy_read/_write_mmd without a PHY driver
  2020-01-16 17:48 ` Vladimir Oltean
@ 2020-01-16 17:52   ` Florian Fainelli
  0 siblings, 0 replies; 6+ messages in thread
From: Florian Fainelli @ 2020-01-16 17:52 UTC (permalink / raw)
  To: Vladimir Oltean, David S. Miller, Russell King - ARM Linux admin,
	Andrew Lunn, Heiner Kallweit
  Cc: netdev, Alex Marginean

On 1/16/20 9:48 AM, Vladimir Oltean wrote:
> On Thu, 16 Jan 2020 at 19:46, Vladimir Oltean <olteanv@gmail.com> wrote:
>>
>> From: Alex Marginean <alexandru.marginean@nxp.com>
>>
>> The APIs can be used by Ethernet drivers without actually loading a PHY
>> driver. This may become more widespread in the future with 802.3z
>> compatible MAC PCS devices being locally driven by the MAC driver when
>> configuring for a PHY mode with in-band negotiation.
>>
>> Check that drv is not NULL before reading from it.
>>
>> Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
>> ---
> 
> Ugh. Can I just add here:
> 
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
> 
> without resending?

That's a tag that patchwork understands, so yes, that works:

http://patchwork.ozlabs.org/patch/1224348/mbox/

> 
>> If this hasn't been reported by now I assume it wasn't an issue so far.
>> So I've targeted the patch for net-next and not provided a Fixes: tag.
>>
>>  drivers/net/phy/phy-core.c | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/net/phy/phy-core.c b/drivers/net/phy/phy-core.c
>> index 769a076514b0..a4d2d59fceca 100644
>> --- a/drivers/net/phy/phy-core.c
>> +++ b/drivers/net/phy/phy-core.c
>> @@ -387,7 +387,7 @@ int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum)
>>         if (regnum > (u16)~0 || devad > 32)
>>                 return -EINVAL;
>>
>> -       if (phydev->drv->read_mmd) {
>> +       if (phydev->drv && phydev->drv->read_mmd) {
>>                 val = phydev->drv->read_mmd(phydev, devad, regnum);
>>         } else if (phydev->is_c45) {
>>                 u32 addr = MII_ADDR_C45 | (devad << 16) | (regnum & 0xffff);
>> @@ -444,7 +444,7 @@ int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val)
>>         if (regnum > (u16)~0 || devad > 32)
>>                 return -EINVAL;
>>
>> -       if (phydev->drv->write_mmd) {
>> +       if (phydev->drv && phydev->drv->write_mmd) {
>>                 ret = phydev->drv->write_mmd(phydev, devad, regnum, val);
>>         } else if (phydev->is_c45) {
>>                 u32 addr = MII_ADDR_C45 | (devad << 16) | (regnum & 0xffff);
>> --
>> 2.17.1
>>
> 
> Sorry,
> -Vladimir
> 


-- 
Florian

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

* Re: [PATCH net-next] net: phy: don't crash in phy_read/_write_mmd without a PHY driver
  2020-01-16 17:46 [PATCH net-next] net: phy: don't crash in phy_read/_write_mmd without a PHY driver Vladimir Oltean
  2020-01-16 17:48 ` Vladimir Oltean
@ 2020-01-16 20:47 ` Heiner Kallweit
  2020-01-16 20:51   ` Florian Fainelli
  2020-01-20  9:08 ` David Miller
  2 siblings, 1 reply; 6+ messages in thread
From: Heiner Kallweit @ 2020-01-16 20:47 UTC (permalink / raw)
  To: Vladimir Oltean, davem, linux, andrew, f.fainelli; +Cc: netdev, Alex Marginean

On 16.01.2020 18:46, Vladimir Oltean wrote:
> From: Alex Marginean <alexandru.marginean@nxp.com>
> 
> The APIs can be used by Ethernet drivers without actually loading a PHY
> driver. This may become more widespread in the future with 802.3z
> compatible MAC PCS devices being locally driven by the MAC driver when
> configuring for a PHY mode with in-band negotiation.
> 
> Check that drv is not NULL before reading from it.
> 
If there's no dedicated PHY driver, then the genphy driver is bound.
I think therefore we don't face issues with the current code.
But the change looks reasonable.

> Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
> ---
> If this hasn't been reported by now I assume it wasn't an issue so far.
> So I've targeted the patch for net-next and not provided a Fixes: tag.
> 
>  drivers/net/phy/phy-core.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/phy/phy-core.c b/drivers/net/phy/phy-core.c
> index 769a076514b0..a4d2d59fceca 100644
> --- a/drivers/net/phy/phy-core.c
> +++ b/drivers/net/phy/phy-core.c
> @@ -387,7 +387,7 @@ int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum)
>  	if (regnum > (u16)~0 || devad > 32)
>  		return -EINVAL;
>  
> -	if (phydev->drv->read_mmd) {
> +	if (phydev->drv && phydev->drv->read_mmd) {
>  		val = phydev->drv->read_mmd(phydev, devad, regnum);
>  	} else if (phydev->is_c45) {
>  		u32 addr = MII_ADDR_C45 | (devad << 16) | (regnum & 0xffff);
> @@ -444,7 +444,7 @@ int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val)
>  	if (regnum > (u16)~0 || devad > 32)
>  		return -EINVAL;
>  
> -	if (phydev->drv->write_mmd) {
> +	if (phydev->drv && phydev->drv->write_mmd) {
>  		ret = phydev->drv->write_mmd(phydev, devad, regnum, val);
>  	} else if (phydev->is_c45) {
>  		u32 addr = MII_ADDR_C45 | (devad << 16) | (regnum & 0xffff);
> 


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

* Re: [PATCH net-next] net: phy: don't crash in phy_read/_write_mmd without a PHY driver
  2020-01-16 20:47 ` Heiner Kallweit
@ 2020-01-16 20:51   ` Florian Fainelli
  0 siblings, 0 replies; 6+ messages in thread
From: Florian Fainelli @ 2020-01-16 20:51 UTC (permalink / raw)
  To: Heiner Kallweit, Vladimir Oltean, davem, linux, andrew
  Cc: netdev, Alex Marginean

On 1/16/20 12:47 PM, Heiner Kallweit wrote:
> On 16.01.2020 18:46, Vladimir Oltean wrote:
>> From: Alex Marginean <alexandru.marginean@nxp.com>
>>
>> The APIs can be used by Ethernet drivers without actually loading a PHY
>> driver. This may become more widespread in the future with 802.3z
>> compatible MAC PCS devices being locally driven by the MAC driver when
>> configuring for a PHY mode with in-band negotiation.
>>
>> Check that drv is not NULL before reading from it.
>>
> If there's no dedicated PHY driver, then the genphy driver is bound.
> I think therefore we don't face issues with the current code.
> But the change looks reasonable.

You can unbind the driver from sysfs and observe the problem.
-- 
Florian

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

* Re: [PATCH net-next] net: phy: don't crash in phy_read/_write_mmd without a PHY driver
  2020-01-16 17:46 [PATCH net-next] net: phy: don't crash in phy_read/_write_mmd without a PHY driver Vladimir Oltean
  2020-01-16 17:48 ` Vladimir Oltean
  2020-01-16 20:47 ` Heiner Kallweit
@ 2020-01-20  9:08 ` David Miller
  2 siblings, 0 replies; 6+ messages in thread
From: David Miller @ 2020-01-20  9:08 UTC (permalink / raw)
  To: olteanv
  Cc: linux, andrew, f.fainelli, hkallweit1, netdev, alexandru.marginean

From: Vladimir Oltean <olteanv@gmail.com>
Date: Thu, 16 Jan 2020 19:46:28 +0200

> From: Alex Marginean <alexandru.marginean@nxp.com>
> 
> The APIs can be used by Ethernet drivers without actually loading a PHY
> driver. This may become more widespread in the future with 802.3z
> compatible MAC PCS devices being locally driven by the MAC driver when
> configuring for a PHY mode with in-band negotiation.
> 
> Check that drv is not NULL before reading from it.
> 
> Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>

Applied, thank you.

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

end of thread, back to index

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-16 17:46 [PATCH net-next] net: phy: don't crash in phy_read/_write_mmd without a PHY driver Vladimir Oltean
2020-01-16 17:48 ` Vladimir Oltean
2020-01-16 17:52   ` Florian Fainelli
2020-01-16 20:47 ` Heiner Kallweit
2020-01-16 20:51   ` Florian Fainelli
2020-01-20  9:08 ` David Miller

Netdev Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/netdev/0 netdev/git/0.git
	git clone --mirror https://lore.kernel.org/netdev/1 netdev/git/1.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 netdev netdev/ https://lore.kernel.org/netdev \
		netdev@vger.kernel.org
	public-inbox-index netdev

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.netdev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git