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:	Wed, 29 Oct 2008 10:12:22 +0100
From:	Giuseppe CAVALLARO <peppe.cavallaro@...com>
To:	netdev@...r.kernel.org
Subject: Doubts about the get_phy_id function.

Hi All,
Using a bad PHY address, the physical device is erroneously attached to 
the MAC device driver.
This happens because the get_phy_id function reads zero from the 
PHYIR1/2 regs and never fails.
I'm facing this problem on some PHY devices (*) but I've not clear 
enough if this can actually depend on an HW issue (e.g.invalid  phy 
addresses have been left floating) or we need to apply the patch below. 
Indeed, it helps me to catch the problem and, as final result, the 
phy_connect always fails on wrong PHY address and the network interface 
cannot be opened.

(*) on other ones, the get_phy_id function reads 0xffff from PHYIR1/2 
regs and fails (as expected results) when I try to attach a wrong PHY 
address.

Welcome advice.
Best Regards,
Peppe

PS: if it makes sense for you, I can rework the patch and send it to the 
ML again.

diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 8ad602c..8a1baf9 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -192,7 +192,7 @@ int get_phy_id(struct mii_bus *bus, int addr, u32 
*phy_id)
         * in the upper half */
        phy_reg = bus->read(bus, addr, MII_PHYSID1);
 
-       if (phy_reg < 0)
+       if (phy_reg <= 0)
                return -EIO;
 
        *phy_id = (phy_reg & 0xffff) << 16;
@@ -200,7 +200,7 @@ int get_phy_id(struct mii_bus *bus, int addr, u32 
*phy_id)
        /* Grab the bits from PHYIR2, and put them in the lower half */
        phy_reg = bus->read(bus, addr, MII_PHYSID2);
 
-       if (phy_reg < 0)
+       if (phy_reg <= 0)
                return -EIO;
 
        *phy_id |= (phy_reg & 0xffff);
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ