Skip to content

Commit 6915bf3

Browse files
hkallweitdavem330
authored andcommitted
net: phy: don't allow __set_phy_supported to add unsupported modes
Currently __set_phy_supported allows to add modes w/o checking whether the PHY supports them. This is wrong, it should never add modes but only remove modes we don't want to support. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 97e6c85 commit 6915bf3

File tree

1 file changed

+14
-28
lines changed

1 file changed

+14
-28
lines changed

drivers/net/phy/phy_device.c

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1898,37 +1898,23 @@ EXPORT_SYMBOL(genphy_loopback);
18981898

18991899
static int __set_phy_supported(struct phy_device *phydev, u32 max_speed)
19001900
{
1901-
__ETHTOOL_DECLARE_LINK_MODE_MASK(speeds) = { 0, };
1902-
1903-
linkmode_set_bit_array(phy_10_100_features_array,
1904-
ARRAY_SIZE(phy_10_100_features_array),
1905-
speeds);
1906-
linkmode_set_bit_array(phy_gbit_features_array,
1907-
ARRAY_SIZE(phy_gbit_features_array),
1908-
speeds);
1909-
1910-
linkmode_andnot(phydev->supported, phydev->supported, speeds);
1911-
19121901
switch (max_speed) {
1913-
default:
1914-
return -ENOTSUPP;
1915-
case SPEED_1000:
1916-
linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT,
1917-
phydev->supported);
1918-
linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
1919-
phydev->supported);
1902+
case SPEED_10:
1903+
linkmode_clear_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT,
1904+
phydev->supported);
1905+
linkmode_clear_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
1906+
phydev->supported);
19201907
/* fall through */
19211908
case SPEED_100:
1922-
linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT,
1923-
phydev->supported);
1924-
linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
1925-
phydev->supported);
1926-
/* fall through */
1927-
case SPEED_10:
1928-
linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT,
1929-
phydev->supported);
1930-
linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
1931-
phydev->supported);
1909+
linkmode_clear_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT,
1910+
phydev->supported);
1911+
linkmode_clear_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
1912+
phydev->supported);
1913+
break;
1914+
case SPEED_1000:
1915+
break;
1916+
default:
1917+
return -ENOTSUPP;
19321918
}
19331919

19341920
return 0;

0 commit comments

Comments
 (0)