netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] hv_netvsc: Add check for kvmalloc_array
@ 2022-03-11  2:43 Jiasheng Jiang
  2022-03-11  3:00 ` Stephen Hemminger
  0 siblings, 1 reply; 13+ messages in thread
From: Jiasheng Jiang @ 2022-03-11  2:43 UTC (permalink / raw)
  To: kys, haiyangz, sthemmin, wei.liu, decui, davem, kuba, ast, daniel,
	hawk, john.fastabend, andrii, kafai, songliubraving, yhs, kpsingh
  Cc: linux-hyperv, netdev, linux-kernel, bpf, Jiasheng Jiang

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>
---
 drivers/net/hyperv/netvsc_drv.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index 3646469433b1..018c4a5f6f44 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -1587,6 +1587,12 @@ 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) {
+		for (j = 0; j < i; j++)
+			data[j] = 0;
+		return;
+	}
+
 	netvsc_get_pcpu_stats(dev, pcpu_sum);
 	for_each_present_cpu(cpu) {
 		struct netvsc_ethtool_pcpu_stats *this_sum = &pcpu_sum[cpu];
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread
* [PATCH] hv_netvsc: Add check for kvmalloc_array
@ 2022-03-11  3:20 Jiasheng Jiang
  2022-03-11  6:43 ` Greg KH
  2022-03-11 17:25 ` Stephen Hemminger
  0 siblings, 2 replies; 13+ messages in thread
From: Jiasheng Jiang @ 2022-03-11  3:20 UTC (permalink / raw)
  To: stephen
  Cc: kys, haiyangz, sthemmin, wei.liu, decui, davem, kuba, ast, daniel,
	hawk, john.fastabend, andrii, kafai, songliubraving, yhs, kpsingh,
	linux-hyperv, netdev, linux-kernel, bpf, Jiasheng Jiang

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>
---
 drivers/net/hyperv/netvsc_drv.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index 3646469433b1..018c4a5f6f44 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -1587,6 +1587,12 @@ 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) {
+		for (j = 0; j < i; j++)
+			data[j] = 0;
+		return;
+	}
+
 	netvsc_get_pcpu_stats(dev, pcpu_sum);
 	for_each_present_cpu(cpu) {
 		struct netvsc_ethtool_pcpu_stats *this_sum = &pcpu_sum[cpu];
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread
* Re: [PATCH] hv_netvsc: Add check for kvmalloc_array
@ 2022-03-11  3:20 Jiasheng Jiang
  0 siblings, 0 replies; 13+ messages in thread
From: Jiasheng Jiang @ 2022-03-11  3:20 UTC (permalink / raw)
  To: stephen
  Cc: kys, haiyangz, sthemmin, wei.liu, decui, davem, kuba, ast, daniel,
	hawk, john.fastabend, andrii, kafai, songliubraving, yhs, kpsingh,
	linux-hyperv, netdev, linux-kernel, bpf, Jiasheng Jiang

On Fri, 11 Mar 2022 11:00:24 +0800
Stephen Hemminger <stephen@networkplumber.org> wrote:
>> +	if (!pcpu_sum) {
>> +		for (j = 0; j < i; j++)
>> +			data[j] = 0;
>> +		return
> 
> Why is unrolled zero (memset) needed? The data area comes from
> ethtool_get_stats and is already zeroed (vzalloc).
> 
> 
> There does look like at TOCTOU error here with on the number of stats.
> Code doesn't look hotplug safe.
> Not sure, but that issue might have been raised during review.

I unrolled the 'data area' since the three 'for loops' before
have already assigned the value to the data area.
And I have not found any review about it.

Thanks,
Jiang


^ permalink raw reply	[flat|nested] 13+ messages in thread
* Re: [PATCH] hv_netvsc: Add check for kvmalloc_array
@ 2022-03-14  1:56 Jiasheng Jiang
  0 siblings, 0 replies; 13+ messages in thread
From: Jiasheng Jiang @ 2022-03-14  1:56 UTC (permalink / raw)
  To: stephen
  Cc: kys, haiyangz, sthemmin, wei.liu, decui, davem, kuba, ast, daniel,
	hawk, john.fastabend, andrii, kafai, songliubraving, yhs, kpsingh,
	linux-hyperv, netdev, linux-kernel, bpf, Jiasheng Jiang

On Sat, 12 Mar 2022 01:25:38 +0800
Stephen Hemminger <stephen@networkplumber.org> wrote:

>> +	if (!pcpu_sum) {
>> +		for (j = 0; j < i; j++)
>> +			data[j] = 0;
>> +		return;
>> +	}
> 
> I don't think you understood what my comment was.
> 
> The zeroing here is not necessary. Just do:
>         if (!pcpu_sum)
>                return;
> 
> The data pointer is to buffer allocated here:
> 
> static int ethtool_get_stats(struct net_device *dev, void __user *useraddr)
> {
> ...
> 	if (n_stats) {
> 		data = vzalloc(array_size(n_stats, sizeof(u64)));  <<<<< is already zeroed.
> 		if (!data)
> 			return -ENOMEM;
> 		ops->get_ethtool_stats(dev, &stats, data);

OK, I will submit a v2 to remove them.

Jiang


^ permalink raw reply	[flat|nested] 13+ messages in thread
* Re: [PATCH] hv_netvsc: Add check for kvmalloc_array
@ 2022-03-14  7:33 Jiasheng Jiang
  2022-03-14  7:38 ` Greg KH
  0 siblings, 1 reply; 13+ messages in thread
From: Jiasheng Jiang @ 2022-03-14  7:33 UTC (permalink / raw)
  To: gregkh
  Cc: stephen, kys, haiyangz, sthemmin, wei.liu, decui, davem, kuba,
	ast, daniel, hawk, john.fastabend, andrii, kafai, songliubraving,
	yhs, kpsingh, linux-hyperv, netdev, linux-kernel, bpf,
	Jiasheng Jiang

On Fri, Mar 11, 2022 at 02:43:48PM +0800, Greg KH wrote:
>> 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>
>> ---
>>  drivers/net/hyperv/netvsc_drv.c | 6 ++++++
>>  1 file changed, 6 insertions(+)
>> 
>> diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
>> index 3646469433b1..018c4a5f6f44 100644
>> --- a/drivers/net/hyperv/netvsc_drv.c
>> +++ b/drivers/net/hyperv/netvsc_drv.c
>> @@ -1587,6 +1587,12 @@ 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) {
>> +		for (j = 0; j < i; j++)
>> +			data[j] = 0;
>> +		return;
>> +	}
> 
>How did you test this to verify it is correct?

Thanks, I have tested the patch by kernel_patch_verify,
and all the tests are passed.

Jiang


^ permalink raw reply	[flat|nested] 13+ messages in thread
* Re: [PATCH] hv_netvsc: Add check for kvmalloc_array
@ 2022-03-14  8:05 Jiasheng Jiang
  2022-03-14  8:13 ` Greg KH
  0 siblings, 1 reply; 13+ messages in thread
From: Jiasheng Jiang @ 2022-03-14  8:05 UTC (permalink / raw)
  To: gregkh
  Cc: stephen, kys, haiyangz, sthemmin, wei.liu, decui, davem, kuba,
	ast, daniel, hawk, john.fastabend, andrii, kafai, songliubraving,
	yhs, kpsingh, linux-hyperv, netdev, linux-kernel, bpf,
	Jiasheng Jiang

On Mon, Mar 14, 2022 at 03:33:49PM +0800, Greg KH wrote:
>> Thanks, I have tested the patch by kernel_patch_verify,
> 
> What is that?

It a Linux kernel patch static verification helper tool.
Link: https://github.com/nmenon/kernel_patch_verify

>> and all the tests are passed.
> 
> What tests exactly?  How did you fail this allocation?

The failure of allocation is not included in the tests.
And as far as I know, there is not any tool that has the
ability to fail the allocation.
But I think that for safety, the cost of redundant and harmless
check is acceptable.
Also, checking after allocation is a good program pattern.

Thanks,
Jiang


^ permalink raw reply	[flat|nested] 13+ messages in thread
* Re: [PATCH] hv_netvsc: Add check for kvmalloc_array
@ 2022-03-14  8:35 Jiasheng Jiang
  2022-03-14 17:12 ` Jakub Kicinski
  0 siblings, 1 reply; 13+ messages in thread
From: Jiasheng Jiang @ 2022-03-14  8:35 UTC (permalink / raw)
  To: gregkh
  Cc: stephen, kys, haiyangz, sthemmin, wei.liu, decui, davem, kuba,
	ast, daniel, hawk, john.fastabend, andrii, kafai, songliubraving,
	yhs, kpsingh, linux-hyperv, netdev, linux-kernel, bpf,
	Jiasheng Jiang

On Mon, Mar 14, 2022 at 04:13:59PM +0800, Greg KH wrote:
>> The failure of allocation is not included in the tests.
>> And as far as I know, there is not any tool that has the
>> ability to fail the allocation.
> 
> There are tools that do this.
> 

Thanks, could you please tell me the tools?

Jiang

>> But I think that for safety, the cost of redundant and harmless
>> check is acceptable.
>> Also, checking after allocation is a good program pattern.
> 
> That's fine, it's how you clean up that is the problem that not everyone
> gets correct, which is why it is good to verify that you do not
> introduce problems.


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2022-03-14 17:12 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-11  2:43 [PATCH] hv_netvsc: Add check for kvmalloc_array Jiasheng Jiang
2022-03-11  3:00 ` Stephen Hemminger
  -- strict thread matches above, loose matches on Subject: below --
2022-03-11  3:20 Jiasheng Jiang
2022-03-11  6:43 ` Greg KH
2022-03-11 17:25 ` Stephen Hemminger
2022-03-11  3:20 Jiasheng Jiang
2022-03-14  1:56 Jiasheng Jiang
2022-03-14  7:33 Jiasheng Jiang
2022-03-14  7:38 ` Greg KH
2022-03-14  8:05 Jiasheng Jiang
2022-03-14  8:13 ` Greg KH
2022-03-14  8:35 Jiasheng Jiang
2022-03-14 17:12 ` Jakub Kicinski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).