diff options
author | Yunsheng Lin <linyunsheng@huawei.com> | 2018-12-26 19:51:46 +0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-06-11 12:24:13 +0200 |
commit | f1d7eebd9d67f0710e225bcfd08f32a643f449d6 (patch) | |
tree | c70fa76e713fd57496f511777e56a75204392876 /net | |
parent | 647f72b0d75c9faeec36b88fc051339e73008435 (diff) | |
download | linux-stable-f1d7eebd9d67f0710e225bcfd08f32a643f449d6.tar.gz linux-stable-f1d7eebd9d67f0710e225bcfd08f32a643f449d6.tar.bz2 linux-stable-f1d7eebd9d67f0710e225bcfd08f32a643f449d6.zip |
ethtool: check the return value of get_regs_len
commit f9fc54d313fab2834f44f516459cdc8ac91d797f upstream.
The return type for get_regs_len in struct ethtool_ops is int,
the hns3 driver may return error when failing to get the regs
len by sending cmd to firmware.
Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Cc: Michal Kubecek <mkubecek@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/ethtool.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/net/core/ethtool.c b/net/core/ethtool.c index 666164e7a11c..66428c0eb663 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c @@ -428,8 +428,13 @@ static noinline_for_stack int ethtool_get_drvinfo(struct net_device *dev, if (rc >= 0) info.n_priv_flags = rc; } - if (ops->get_regs_len) - info.regdump_len = ops->get_regs_len(dev); + if (ops->get_regs_len) { + int ret = ops->get_regs_len(dev); + + if (ret > 0) + info.regdump_len = ret; + } + if (ops->get_eeprom_len) info.eedump_len = ops->get_eeprom_len(dev); @@ -883,6 +888,9 @@ static int ethtool_get_regs(struct net_device *dev, char __user *useraddr) return -EFAULT; reglen = ops->get_regs_len(dev); + if (reglen <= 0) + return reglen; + if (regs.len > reglen) regs.len = reglen; |