mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-25 18:30:06 +00:00
ethtool: check the return value of get_regs_len
commit f9fc54d313
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>
This commit is contained in:
parent
badd8e3149
commit
9665d94ce3
1 changed files with 10 additions and 2 deletions
|
@ -890,8 +890,13 @@ static noinline_for_stack int ethtool_get_drvinfo(struct net_device *dev,
|
||||||
if (rc >= 0)
|
if (rc >= 0)
|
||||||
info.n_priv_flags = rc;
|
info.n_priv_flags = rc;
|
||||||
}
|
}
|
||||||
if (ops->get_regs_len)
|
if (ops->get_regs_len) {
|
||||||
info.regdump_len = ops->get_regs_len(dev);
|
int ret = ops->get_regs_len(dev);
|
||||||
|
|
||||||
|
if (ret > 0)
|
||||||
|
info.regdump_len = ret;
|
||||||
|
}
|
||||||
|
|
||||||
if (ops->get_eeprom_len)
|
if (ops->get_eeprom_len)
|
||||||
info.eedump_len = ops->get_eeprom_len(dev);
|
info.eedump_len = ops->get_eeprom_len(dev);
|
||||||
|
|
||||||
|
@ -1392,6 +1397,9 @@ static int ethtool_get_regs(struct net_device *dev, char __user *useraddr)
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
reglen = ops->get_regs_len(dev);
|
reglen = ops->get_regs_len(dev);
|
||||||
|
if (reglen <= 0)
|
||||||
|
return reglen;
|
||||||
|
|
||||||
if (regs.len > reglen)
|
if (regs.len > reglen)
|
||||||
regs.len = reglen;
|
regs.len = reglen;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue