]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/4.4.181/ethtool-check-the-return-value-of-get_regs_len.patch
Linux 4.4.181
[thirdparty/kernel/stable-queue.git] / releases / 4.4.181 / ethtool-check-the-return-value-of-get_regs_len.patch
1 From f9fc54d313fab2834f44f516459cdc8ac91d797f Mon Sep 17 00:00:00 2001
2 From: Yunsheng Lin <linyunsheng@huawei.com>
3 Date: Wed, 26 Dec 2018 19:51:46 +0800
4 Subject: ethtool: check the return value of get_regs_len
5
6 From: Yunsheng Lin <linyunsheng@huawei.com>
7
8 commit f9fc54d313fab2834f44f516459cdc8ac91d797f upstream.
9
10 The return type for get_regs_len in struct ethtool_ops is int,
11 the hns3 driver may return error when failing to get the regs
12 len by sending cmd to firmware.
13
14 Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com>
15 Signed-off-by: David S. Miller <davem@davemloft.net>
16 Cc: Michal Kubecek <mkubecek@suse.cz>
17 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
18
19 ---
20 net/core/ethtool.c | 12 ++++++++++--
21 1 file changed, 10 insertions(+), 2 deletions(-)
22
23 --- a/net/core/ethtool.c
24 +++ b/net/core/ethtool.c
25 @@ -428,8 +428,13 @@ static noinline_for_stack int ethtool_ge
26 if (rc >= 0)
27 info.n_priv_flags = rc;
28 }
29 - if (ops->get_regs_len)
30 - info.regdump_len = ops->get_regs_len(dev);
31 + if (ops->get_regs_len) {
32 + int ret = ops->get_regs_len(dev);
33 +
34 + if (ret > 0)
35 + info.regdump_len = ret;
36 + }
37 +
38 if (ops->get_eeprom_len)
39 info.eedump_len = ops->get_eeprom_len(dev);
40
41 @@ -883,6 +888,9 @@ static int ethtool_get_regs(struct net_d
42 return -EFAULT;
43
44 reglen = ops->get_regs_len(dev);
45 + if (reglen <= 0)
46 + return reglen;
47 +
48 if (regs.len > reglen)
49 regs.len = reglen;
50