ethtool: prevent endless loop if eeprom size is smaller than announced
authorHeiner Kallweit <hkallweit1@gmail.com>
Mon, 13 Sep 2021 19:58:26 +0000 (21:58 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 14 Sep 2021 13:26:47 +0000 (14:26 +0100)
It shouldn't happen, but can happen that readable eeprom size is smaller
than announced. Then we would be stuck in an endless loop here because
after reaching the actual end reads return eeprom.len = 0. I faced this
issue when making a mistake in driver development. Detect this scenario
and return an error.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ethtool/ioctl.c

index f2abc31..999e2a6 100644 (file)
@@ -1537,6 +1537,10 @@ static int ethtool_get_any_eeprom(struct net_device *dev, void __user *useraddr,
                ret = getter(dev, &eeprom, data);
                if (ret)
                        break;
+               if (!eeprom.len) {
+                       ret = -EIO;
+                       break;
+               }
                if (copy_to_user(userbuf, data, eeprom.len)) {
                        ret = -EFAULT;
                        break;