lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Fri, 22 Jan 2021 16:03:34 +0100
From:   Marc Kleine-Budde <mkl@...gutronix.de>
To:     netdev@...r.kernel.org
Cc:     Andrew Lunn <andrew@...n.ch>,
        Heiner Kallweit <hkallweit1@...il.com>, kernel@...gutronix.de,
        Marc Kleine-Budde <mkl@...gutronix.de>,
        Dan Murphy <dmurphy@...com>
Subject: [PATCH] net: dp83tc811: fix link detection and possbile IRQ storm

In our setup the dp83tc811 is configure to master mode. When there is no slave
connected the dp83tc811 triggers an interrupt is triggerd, several bits in the
status registers are set, and te INT_N pin goes low. One of interrupt bits is
the NO_FRAME interrupt.

Reading the status register acknowledges the interrupt, but as there is still
no slave connected, the NO_FRAME interrupt stays set and the INT_N pin low. For
level triggered IRQs this results in an interrupt storm, as long as the slave
is not connected. For edge triggered interupts the link change event, when the
slave comes online, is lost.

To fix this problem the NO_FRAME interrupt is not enabled. At least in our
testcase with edge triggered interrupts link change events are now properly
detected.

Cc: Dan Murphy <dmurphy@...com>
Signed-off-by: Marc Kleine-Budde <mkl@...gutronix.de>
---
 drivers/net/phy/dp83tc811.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/net/phy/dp83tc811.c b/drivers/net/phy/dp83tc811.c
index b8d802cbf615..2801492bfaad 100644
--- a/drivers/net/phy/dp83tc811.c
+++ b/drivers/net/phy/dp83tc811.c
@@ -222,7 +222,6 @@ static int dp83811_config_intr(struct phy_device *phydev)
 			return err;
 
 		misr_status = (DP83811_LPS_INT_EN |
-			       DP83811_NO_FRAME_INT_EN |
 			       DP83811_POR_DONE_INT_EN);
 
 		err = phy_write(phydev, MII_DP83811_INT_STAT3, misr_status);
-- 
2.29.2


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ