| From 505e41c6a14b3587b66429999c7546c3257ed7b0 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 14 Mar 2022 10:01:25 +0800 |
| Subject: hv_netvsc: Add check for kvmalloc_array |
| |
| From: Jiasheng Jiang <jiasheng@iscas.ac.cn> |
| |
| [ Upstream commit 886e44c9298a6b428ae046e2fa092ca52e822e6a ] |
| |
| As the potential failure of the kvmalloc_array(), |
| it should be better to check and restore the 'data' |
| if fails in order to avoid the dereference of the |
| NULL pointer. |
| |
| Fixes: 6ae746711263 ("hv_netvsc: Add per-cpu ethtool stats for netvsc") |
| Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn> |
| Link: https://lore.kernel.org/r/20220314020125.2365084-1-jiasheng@iscas.ac.cn |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/hyperv/netvsc_drv.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c |
| index 362b7ca6f3b2..57e92c5bfcc9 100644 |
| --- a/drivers/net/hyperv/netvsc_drv.c |
| +++ b/drivers/net/hyperv/netvsc_drv.c |
| @@ -1445,6 +1445,9 @@ static void netvsc_get_ethtool_stats(struct net_device *dev, |
| pcpu_sum = kvmalloc_array(num_possible_cpus(), |
| sizeof(struct netvsc_ethtool_pcpu_stats), |
| GFP_KERNEL); |
| + if (!pcpu_sum) |
| + return; |
| + |
| netvsc_get_pcpu_stats(dev, pcpu_sum); |
| for_each_present_cpu(cpu) { |
| struct netvsc_ethtool_pcpu_stats *this_sum = &pcpu_sum[cpu]; |
| -- |
| 2.34.1 |
| |