linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] net: stmmac: Fix possible deadlock when disabling EEE support
@ 2019-06-26 10:23 Jon Hunter
  2019-06-26 10:23 ` [PATCH 2/2] net: stmmac: Fix crash observed if PHY does not support EEE Jon Hunter
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Jon Hunter @ 2019-06-26 10:23 UTC (permalink / raw)
  To: Giuseppe Cavallaro, Alexandre Torgue, Jose Abreu
  Cc: netdev, linux-kernel, linux-tegra, Jon Hunter

When stmmac_eee_init() is called to disable EEE support, then the timer
for EEE support is stopped and we return from the function. Prior to
stopping the timer, a mutex was acquired but in this case it is never
released and so could cause a deadlock. Fix this by releasing the mutex
prior to returning from stmmax_eee_init() when stopping the EEE timer.

Fixes: 74371272f97f ("net: stmmac: Convert to phylink and remove phylib logic")
Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index b628c697cee9..6c6c6ec3c781 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -402,6 +402,7 @@ bool stmmac_eee_init(struct stmmac_priv *priv)
 		netdev_dbg(priv->dev, "disable EEE\n");
 		del_timer_sync(&priv->eee_ctrl_timer);
 		stmmac_set_eee_timer(priv, priv->hw, 0, tx_lpi_timer);
+		mutex_unlock(&priv->lock);
 		return false;
 	}
 
-- 
1.9.1


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

* [PATCH 2/2] net: stmmac: Fix crash observed if PHY does not support EEE
  2019-06-26 10:23 [PATCH 1/2] net: stmmac: Fix possible deadlock when disabling EEE support Jon Hunter
@ 2019-06-26 10:23 ` Jon Hunter
  2019-06-26 10:45   ` Thierry Reding
  2019-06-26 16:11   ` David Miller
  2019-06-26 10:45 ` [PATCH 1/2] net: stmmac: Fix possible deadlock when disabling EEE support Thierry Reding
  2019-06-26 16:10 ` David Miller
  2 siblings, 2 replies; 7+ messages in thread
From: Jon Hunter @ 2019-06-26 10:23 UTC (permalink / raw)
  To: Giuseppe Cavallaro, Alexandre Torgue, Jose Abreu
  Cc: netdev, linux-kernel, linux-tegra, Jon Hunter

If the PHY does not support EEE mode, then a crash is observed when the
ethernet interface is enabled. The crash occurs, because if the PHY does
not support EEE, then although the EEE timer is never configured, it is
still marked as enabled and so the stmmac ethernet driver is still
trying to update the timer by calling mod_timer(). This triggers a BUG()
in the mod_timer() because we are trying to update a timer when there is
no callback function set because timer_setup() was never called for this
timer.

The problem is caused because we return true from the function
stmmac_eee_init(), marking the EEE timer as enabled, even when we have
not configured the EEE timer. Fix this by ensuring that we return false
if the PHY does not support EEE and hence, 'eee_active' is not set.

Fixes: 74371272f97f ("net: stmmac: Convert to phylink and remove phylib logic")
Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 6c6c6ec3c781..8f5ebd51859e 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -398,10 +398,12 @@ bool stmmac_eee_init(struct stmmac_priv *priv)
 	mutex_lock(&priv->lock);
 
 	/* Check if it needs to be deactivated */
-	if (!priv->eee_active && priv->eee_enabled) {
-		netdev_dbg(priv->dev, "disable EEE\n");
-		del_timer_sync(&priv->eee_ctrl_timer);
-		stmmac_set_eee_timer(priv, priv->hw, 0, tx_lpi_timer);
+	if (!priv->eee_active) {
+		if (priv->eee_enabled) {
+			netdev_dbg(priv->dev, "disable EEE\n");
+			del_timer_sync(&priv->eee_ctrl_timer);
+			stmmac_set_eee_timer(priv, priv->hw, 0, tx_lpi_timer);
+		}
 		mutex_unlock(&priv->lock);
 		return false;
 	}
-- 
1.9.1


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

* Re: [PATCH 1/2] net: stmmac: Fix possible deadlock when disabling EEE support
  2019-06-26 10:23 [PATCH 1/2] net: stmmac: Fix possible deadlock when disabling EEE support Jon Hunter
  2019-06-26 10:23 ` [PATCH 2/2] net: stmmac: Fix crash observed if PHY does not support EEE Jon Hunter
@ 2019-06-26 10:45 ` Thierry Reding
  2019-06-26 15:29   ` Willem de Bruijn
  2019-06-26 16:10 ` David Miller
  2 siblings, 1 reply; 7+ messages in thread
From: Thierry Reding @ 2019-06-26 10:45 UTC (permalink / raw)
  To: Jon Hunter
  Cc: Giuseppe Cavallaro, Alexandre Torgue, Jose Abreu, netdev,
	linux-kernel, linux-tegra

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

On Wed, Jun 26, 2019 at 11:23:21AM +0100, Jon Hunter wrote:
> When stmmac_eee_init() is called to disable EEE support, then the timer
> for EEE support is stopped and we return from the function. Prior to
> stopping the timer, a mutex was acquired but in this case it is never
> released and so could cause a deadlock. Fix this by releasing the mutex
> prior to returning from stmmax_eee_init() when stopping the EEE timer.
> 
> Fixes: 74371272f97f ("net: stmmac: Convert to phylink and remove phylib logic")
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
> ---
>  drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 1 +
>  1 file changed, 1 insertion(+)

Tested-by: Thierry Reding <treding@nvidia.com>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH 2/2] net: stmmac: Fix crash observed if PHY does not support EEE
  2019-06-26 10:23 ` [PATCH 2/2] net: stmmac: Fix crash observed if PHY does not support EEE Jon Hunter
@ 2019-06-26 10:45   ` Thierry Reding
  2019-06-26 16:11   ` David Miller
  1 sibling, 0 replies; 7+ messages in thread
From: Thierry Reding @ 2019-06-26 10:45 UTC (permalink / raw)
  To: Jon Hunter
  Cc: Giuseppe Cavallaro, Alexandre Torgue, Jose Abreu, netdev,
	linux-kernel, linux-tegra

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

On Wed, Jun 26, 2019 at 11:23:22AM +0100, Jon Hunter wrote:
> If the PHY does not support EEE mode, then a crash is observed when the
> ethernet interface is enabled. The crash occurs, because if the PHY does
> not support EEE, then although the EEE timer is never configured, it is
> still marked as enabled and so the stmmac ethernet driver is still
> trying to update the timer by calling mod_timer(). This triggers a BUG()
> in the mod_timer() because we are trying to update a timer when there is
> no callback function set because timer_setup() was never called for this
> timer.
> 
> The problem is caused because we return true from the function
> stmmac_eee_init(), marking the EEE timer as enabled, even when we have
> not configured the EEE timer. Fix this by ensuring that we return false
> if the PHY does not support EEE and hence, 'eee_active' is not set.
> 
> Fixes: 74371272f97f ("net: stmmac: Convert to phylink and remove phylib logic")
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
> ---
>  drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)

Thanks for hunting this down!

Tested-by: Thierry Reding <treding@nvidia.com>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH 1/2] net: stmmac: Fix possible deadlock when disabling EEE support
  2019-06-26 10:45 ` [PATCH 1/2] net: stmmac: Fix possible deadlock when disabling EEE support Thierry Reding
@ 2019-06-26 15:29   ` Willem de Bruijn
  0 siblings, 0 replies; 7+ messages in thread
From: Willem de Bruijn @ 2019-06-26 15:29 UTC (permalink / raw)
  To: Thierry Reding
  Cc: Jon Hunter, Giuseppe Cavallaro, Alexandre Torgue, Jose Abreu,
	Network Development, linux-kernel, linux-tegra

On Wed, Jun 26, 2019 at 6:45 AM Thierry Reding <thierry.reding@gmail.com> wrote:
>
> On Wed, Jun 26, 2019 at 11:23:21AM +0100, Jon Hunter wrote:
> > When stmmac_eee_init() is called to disable EEE support, then the timer
> > for EEE support is stopped and we return from the function. Prior to
> > stopping the timer, a mutex was acquired but in this case it is never
> > released and so could cause a deadlock. Fix this by releasing the mutex
> > prior to returning from stmmax_eee_init() when stopping the EEE timer.
> >
> > Fixes: 74371272f97f ("net: stmmac: Convert to phylink and remove phylib logic")
> > Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
> > ---
> >  drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 1 +
> >  1 file changed, 1 insertion(+)
>
> Tested-by: Thierry Reding <treding@nvidia.com>

Acked-by: Willem de Bruijn <willemb@google.com>

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

* Re: [PATCH 1/2] net: stmmac: Fix possible deadlock when disabling EEE support
  2019-06-26 10:23 [PATCH 1/2] net: stmmac: Fix possible deadlock when disabling EEE support Jon Hunter
  2019-06-26 10:23 ` [PATCH 2/2] net: stmmac: Fix crash observed if PHY does not support EEE Jon Hunter
  2019-06-26 10:45 ` [PATCH 1/2] net: stmmac: Fix possible deadlock when disabling EEE support Thierry Reding
@ 2019-06-26 16:10 ` David Miller
  2 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2019-06-26 16:10 UTC (permalink / raw)
  To: jonathanh
  Cc: peppe.cavallaro, alexandre.torgue, joabreu, netdev, linux-kernel,
	linux-tegra

From: Jon Hunter <jonathanh@nvidia.com>
Date: Wed, 26 Jun 2019 11:23:21 +0100

> When stmmac_eee_init() is called to disable EEE support, then the timer
> for EEE support is stopped and we return from the function. Prior to
> stopping the timer, a mutex was acquired but in this case it is never
> released and so could cause a deadlock. Fix this by releasing the mutex
> prior to returning from stmmax_eee_init() when stopping the EEE timer.
> 
> Fixes: 74371272f97f ("net: stmmac: Convert to phylink and remove phylib logic")
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>

When targetting net-next for a set of changes, make this explicit and clear
by saying "[PATCH net-next ...] ..." in your Subject lines in the future.

Applied.

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

* Re: [PATCH 2/2] net: stmmac: Fix crash observed if PHY does not support EEE
  2019-06-26 10:23 ` [PATCH 2/2] net: stmmac: Fix crash observed if PHY does not support EEE Jon Hunter
  2019-06-26 10:45   ` Thierry Reding
@ 2019-06-26 16:11   ` David Miller
  1 sibling, 0 replies; 7+ messages in thread
From: David Miller @ 2019-06-26 16:11 UTC (permalink / raw)
  To: jonathanh
  Cc: peppe.cavallaro, alexandre.torgue, joabreu, netdev, linux-kernel,
	linux-tegra

From: Jon Hunter <jonathanh@nvidia.com>
Date: Wed, 26 Jun 2019 11:23:22 +0100

> If the PHY does not support EEE mode, then a crash is observed when the
> ethernet interface is enabled. The crash occurs, because if the PHY does
> not support EEE, then although the EEE timer is never configured, it is
> still marked as enabled and so the stmmac ethernet driver is still
> trying to update the timer by calling mod_timer(). This triggers a BUG()
> in the mod_timer() because we are trying to update a timer when there is
> no callback function set because timer_setup() was never called for this
> timer.
> 
> The problem is caused because we return true from the function
> stmmac_eee_init(), marking the EEE timer as enabled, even when we have
> not configured the EEE timer. Fix this by ensuring that we return false
> if the PHY does not support EEE and hence, 'eee_active' is not set.
> 
> Fixes: 74371272f97f ("net: stmmac: Convert to phylink and remove phylib logic")
> Signed-off-by: Jon Hunter <jonathanh@nvidia.com>

Applied.

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

end of thread, other threads:[~2019-06-26 16:11 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-26 10:23 [PATCH 1/2] net: stmmac: Fix possible deadlock when disabling EEE support Jon Hunter
2019-06-26 10:23 ` [PATCH 2/2] net: stmmac: Fix crash observed if PHY does not support EEE Jon Hunter
2019-06-26 10:45   ` Thierry Reding
2019-06-26 16:11   ` David Miller
2019-06-26 10:45 ` [PATCH 1/2] net: stmmac: Fix possible deadlock when disabling EEE support Thierry Reding
2019-06-26 15:29   ` Willem de Bruijn
2019-06-26 16:10 ` David Miller

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).