From 2be309597dd4adc42a25c6c23e600cc28711091b Mon Sep 17 00:00:00 2001 From: Russell King Date: Fri, 14 Apr 2017 20:17:04 +0100 Subject: sfp: fix eeprom reading Signed-off-by: Russell King --- drivers/net/phy/sfp.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c index 1f7001522a8c..1f5edc351b2d 100644 --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c @@ -1013,9 +1013,7 @@ static int sfp_module_eeprom(void *priv, struct ethtool_eeprom *ee, u8 *data) first = ee->offset; last = ee->offset + ee->len; if (first < ETH_MODULE_SFF_8079_LEN) { - len = last; - if (len > ETH_MODULE_SFF_8079_LEN) - len = ETH_MODULE_SFF_8079_LEN; + len = min_t(unsigned int, last, ETH_MODULE_SFF_8079_LEN); len -= first; ret = sfp->read(sfp, false, first, data, len); @@ -1025,8 +1023,11 @@ static int sfp_module_eeprom(void *priv, struct ethtool_eeprom *ee, u8 *data) first += len; data += len; } - if (first >= ETH_MODULE_SFF_8079_LEN && last > first) { - len = last - first; + if (first >= ETH_MODULE_SFF_8079_LEN && + first < ETH_MODULE_SFF_8472_LEN) { + len = min_t(unsigned int, last, ETH_MODULE_SFF_8472_LEN); + len -= first; + first -= ETH_MODULE_SFF_8079_LEN; ret = sfp->read(sfp, true, first, data, len); if (ret < 0) -- cgit