From: Yunsheng Lin Date: Wed, 26 Dec 2018 11:51:46 +0000 (+0800) Subject: ethtool: check the return value of get_regs_len X-Git-Tag: v4.9.181~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b9d3bd8e2897838af22c96d6c5f5bfc8261f5cd8;p=platform%2Fkernel%2Flinux-amlogic.git 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 Signed-off-by: David S. Miller Cc: Michal Kubecek Signed-off-by: Greg Kroah-Hartman --- diff --git a/net/core/ethtool.c b/net/core/ethtool.c index bb5a12a..ffe7b03 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c @@ -878,8 +878,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); @@ -1380,6 +1385,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;