Skip to content

Commit

Permalink
net: ethtool: Return -EOPNOTSUPP if user space tries to read EEPROM w…
Browse files Browse the repository at this point in the history
…ith lengh 0

If a driver supports reading EEPROM but no EEPROM is installed in the system,
the driver's get_eeprom_len function returns 0. ethtool will subsequently
try to read that zero-length EEPROM anyway. If the driver does not support
EEPROM access at all, this operation will return -EOPNOTSUPP. If the driver
does support EEPROM access but no EEPROM is installed, the operation will
return -EINVAL. Return -EOPNOTSUPP in both cases for consistency.

Signed-off-by: Guenter Roeck <[email protected]>
Tested-by: Andrew Lunn <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
groeck authored and davem330 committed Oct 31, 2014
1 parent 1e19e08 commit e0fb6fb
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions net/core/ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -1036,7 +1036,8 @@ static int ethtool_get_eeprom(struct net_device *dev, void __user *useraddr)
{
const struct ethtool_ops *ops = dev->ethtool_ops;

if (!ops->get_eeprom || !ops->get_eeprom_len)
if (!ops->get_eeprom || !ops->get_eeprom_len ||
!ops->get_eeprom_len(dev))
return -EOPNOTSUPP;

return ethtool_get_any_eeprom(dev, useraddr, ops->get_eeprom,
Expand All @@ -1052,7 +1053,8 @@ static int ethtool_set_eeprom(struct net_device *dev, void __user *useraddr)
u8 *data;
int ret = 0;

if (!ops->set_eeprom || !ops->get_eeprom_len)
if (!ops->set_eeprom || !ops->get_eeprom_len ||
!ops->get_eeprom_len(dev))
return -EOPNOTSUPP;

if (copy_from_user(&eeprom, useraddr, sizeof(eeprom)))
Expand Down

0 comments on commit e0fb6fb

Please sign in to comment.