linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] virtio-pci: Remove wrong address verification in vp_del_vqs()
@ 2022-04-15  2:30 Murilo Opsfelder Araujo
  2022-04-15  3:51 ` Murilo Opsfelder Araújo
  0 siblings, 1 reply; 7+ messages in thread
From: Murilo Opsfelder Araujo @ 2022-04-15  2:30 UTC (permalink / raw)
  To: mst
  Cc: jasowang, virtualization, linux-kernel, mopsfelder,
	Murilo Opsfelder Araujo

GCC 12 enhanced -Waddress when comparing array address to null [0],
which warns:

    drivers/virtio/virtio_pci_common.c: In function ‘vp_del_vqs’:
    drivers/virtio/virtio_pci_common.c:257:29: warning: the comparison will always evaluate as ‘true’ for the pointer operand in ‘vp_dev->msix_affinity_masks + (sizetype)((long unsigned int)i * 256)’ must not be NULL [-Waddress]
      257 |                         if (vp_dev->msix_affinity_masks[i])
          |                             ^~~~~~

In fact, the verification is comparing the result of a pointer
arithmetic, the address "msix_affinity_masks + i", which will always
evaluate to true.

Under the hood, free_cpumask_var() calls kfree(), which is safe to pass
NULL, not requiring non-null verification.  So remove the verification
to make compiler happy (happy compiler, happy life).

[0] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102103

Signed-off-by: Murilo Opsfelder Araujo <muriloo@linux.ibm.com>
---
 drivers/virtio/virtio_pci_common.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
index d724f676608b..5046efcffb4c 100644
--- a/drivers/virtio/virtio_pci_common.c
+++ b/drivers/virtio/virtio_pci_common.c
@@ -254,8 +254,7 @@ void vp_del_vqs(struct virtio_device *vdev)
 
 	if (vp_dev->msix_affinity_masks) {
 		for (i = 0; i < vp_dev->msix_vectors; i++)
-			if (vp_dev->msix_affinity_masks[i])
-				free_cpumask_var(vp_dev->msix_affinity_masks[i]);
+			free_cpumask_var(vp_dev->msix_affinity_masks[i]);
 	}
 
 	if (vp_dev->msix_enabled) {
-- 
2.35.1


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

* Re: [PATCH] virtio-pci: Remove wrong address verification in vp_del_vqs()
  2022-04-15  2:30 [PATCH] virtio-pci: Remove wrong address verification in vp_del_vqs() Murilo Opsfelder Araujo
@ 2022-04-15  3:51 ` Murilo Opsfelder Araújo
  2022-04-28  9:46   ` Christophe Marie Francois Dupont de Dinechin
  0 siblings, 1 reply; 7+ messages in thread
From: Murilo Opsfelder Araújo @ 2022-04-15  3:51 UTC (permalink / raw)
  To: mst; +Cc: jasowang, virtualization, linux-kernel, mopsfelder, dinechin

On 4/14/22 23:30, Murilo Opsfelder Araujo wrote:
> GCC 12 enhanced -Waddress when comparing array address to null [0],
> which warns:
> 
>      drivers/virtio/virtio_pci_common.c: In function ‘vp_del_vqs’:
>      drivers/virtio/virtio_pci_common.c:257:29: warning: the comparison will always evaluate as ‘true’ for the pointer operand in ‘vp_dev->msix_affinity_masks + (sizetype)((long unsigned int)i * 256)’ must not be NULL [-Waddress]
>        257 |                         if (vp_dev->msix_affinity_masks[i])
>            |                             ^~~~~~
> 
> In fact, the verification is comparing the result of a pointer
> arithmetic, the address "msix_affinity_masks + i", which will always
> evaluate to true.
> 
> Under the hood, free_cpumask_var() calls kfree(), which is safe to pass
> NULL, not requiring non-null verification.  So remove the verification
> to make compiler happy (happy compiler, happy life).
> 
> [0] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102103
> 
> Signed-off-by: Murilo Opsfelder Araujo <muriloo@linux.ibm.com>
> ---
>   drivers/virtio/virtio_pci_common.c | 3 +--
>   1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
> index d724f676608b..5046efcffb4c 100644
> --- a/drivers/virtio/virtio_pci_common.c
> +++ b/drivers/virtio/virtio_pci_common.c
> @@ -254,8 +254,7 @@ void vp_del_vqs(struct virtio_device *vdev)
>   
>   	if (vp_dev->msix_affinity_masks) {
>   		for (i = 0; i < vp_dev->msix_vectors; i++)
> -			if (vp_dev->msix_affinity_masks[i])
> -				free_cpumask_var(vp_dev->msix_affinity_masks[i]);
> +			free_cpumask_var(vp_dev->msix_affinity_masks[i]);
>   	}
>   
>   	if (vp_dev->msix_enabled) {

After I sent this message, I realized that Christophe (copied here)
had already proposed a fix:

     https://lore.kernel.org/lkml/20220414150855.2407137-4-dinechin@redhat.com/

Christophe,

Since free_cpumask_var() calls kfree() and kfree() is null-safe,
can we just drop this null verification and call free_cpumask_var() right away?

-- 
Murilo

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

* Re: [PATCH] virtio-pci: Remove wrong address verification in vp_del_vqs()
  2022-04-15  3:51 ` Murilo Opsfelder Araújo
@ 2022-04-28  9:46   ` Christophe Marie Francois Dupont de Dinechin
  2022-04-28  9:51     ` Christophe Marie Francois Dupont de Dinechin
  0 siblings, 1 reply; 7+ messages in thread
From: Christophe Marie Francois Dupont de Dinechin @ 2022-04-28  9:46 UTC (permalink / raw)
  To: muriloo
  Cc: Michael S. Tsirkin, Jason Wang, virtualization, linux-kernel,
	mopsfelder, Christophe de Dinechin



> On 15 Apr 2022, at 05:51, Murilo Opsfelder Araújo <muriloo@linux.ibm.com> wrote:
> 
> On 4/14/22 23:30, Murilo Opsfelder Araujo wrote:
>> GCC 12 enhanced -Waddress when comparing array address to null [0],
>> which warns:
>>     drivers/virtio/virtio_pci_common.c: In function ‘vp_del_vqs’:
>>     drivers/virtio/virtio_pci_common.c:257:29: warning: the comparison will always evaluate as ‘true’ for the pointer operand in ‘vp_dev->msix_affinity_masks + (sizetype)((long unsigned int)i * 256)’ must not be NULL [-Waddress]
>>       257 |                         if (vp_dev->msix_affinity_masks[i])
>>           |                             ^~~~~~
>> In fact, the verification is comparing the result of a pointer
>> arithmetic, the address "msix_affinity_masks + i", which will always
>> evaluate to true.
>> Under the hood, free_cpumask_var() calls kfree(), which is safe to pass
>> NULL, not requiring non-null verification.  So remove the verification
>> to make compiler happy (happy compiler, happy life).
>> [0] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102103
>> Signed-off-by: Murilo Opsfelder Araujo <muriloo@linux.ibm.com>
>> ---
>>  drivers/virtio/virtio_pci_common.c | 3 +--
>>  1 file changed, 1 insertion(+), 2 deletions(-)
>> diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
>> index d724f676608b..5046efcffb4c 100644
>> --- a/drivers/virtio/virtio_pci_common.c
>> +++ b/drivers/virtio/virtio_pci_common.c
>> @@ -254,8 +254,7 @@ void vp_del_vqs(struct virtio_device *vdev)
>>    	if (vp_dev->msix_affinity_masks) {
>>  		for (i = 0; i < vp_dev->msix_vectors; i++)
>> -			if (vp_dev->msix_affinity_masks[i])
>> -				free_cpumask_var(vp_dev->msix_affinity_masks[i]);
>> +			free_cpumask_var(vp_dev->msix_affinity_masks[i]);
>>  	}
>>    	if (vp_dev->msix_enabled) {
> 
> After I sent this message, I realized that Christophe (copied here)
> had already proposed a fix:
> 
>    https://lore.kernel.org/lkml/20220414150855.2407137-4-dinechin@redhat.com/
> 
> Christophe,
> 
> Since free_cpumask_var() calls kfree() and kfree() is null-safe,
> can we just drop this null verification and call free_cpumask_var() right away?

Apologies for the delay in responding, broken laptop…

In the case where CONFIG_CPUMASK_OFFSTACK is not defined, we have:

	typedef struct cpumask cpumask_var_t[1];

So that vp_dev->msix_affinity_masks[i] is statically not null (that’s the warning)
but also a static pointer, so not kfree-safe IMO.



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

* Re: [PATCH] virtio-pci: Remove wrong address verification in vp_del_vqs()
  2022-04-28  9:46   ` Christophe Marie Francois Dupont de Dinechin
@ 2022-04-28  9:51     ` Christophe Marie Francois Dupont de Dinechin
  2022-04-28  9:55       ` Christophe Marie Francois Dupont de Dinechin
  0 siblings, 1 reply; 7+ messages in thread
From: Christophe Marie Francois Dupont de Dinechin @ 2022-04-28  9:51 UTC (permalink / raw)
  To: muriloo
  Cc: Michael S. Tsirkin, Jason Wang, virtualization, linux-kernel,
	mopsfelder, Christophe de Dinechin



> On 28 Apr 2022, at 11:46, Christophe Marie Francois Dupont de Dinechin <cdupontd@redhat.com> wrote:
> 
> 
> 
>> On 15 Apr 2022, at 05:51, Murilo Opsfelder Araújo <muriloo@linux.ibm.com> wrote:
>> 
>> On 4/14/22 23:30, Murilo Opsfelder Araujo wrote:
>>> GCC 12 enhanced -Waddress when comparing array address to null [0],
>>> which warns:
>>> drivers/virtio/virtio_pci_common.c: In function ‘vp_del_vqs’:
>>> drivers/virtio/virtio_pci_common.c:257:29: warning: the comparison will always evaluate as ‘true’ for the pointer operand in ‘vp_dev->msix_affinity_masks + (sizetype)((long unsigned int)i * 256)’ must not be NULL [-Waddress]
>>> 257 | if (vp_dev->msix_affinity_masks[i])
>>> | ^~~~~~
>>> In fact, the verification is comparing the result of a pointer
>>> arithmetic, the address "msix_affinity_masks + i", which will always
>>> evaluate to true.
>>> Under the hood, free_cpumask_var() calls kfree(), which is safe to pass
>>> NULL, not requiring non-null verification. So remove the verification
>>> to make compiler happy (happy compiler, happy life).
>>> [0] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102103
>>> Signed-off-by: Murilo Opsfelder Araujo <muriloo@linux.ibm.com>
>>> ---
>>> drivers/virtio/virtio_pci_common.c | 3 +--
>>> 1 file changed, 1 insertion(+), 2 deletions(-)
>>> diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
>>> index d724f676608b..5046efcffb4c 100644
>>> --- a/drivers/virtio/virtio_pci_common.c
>>> +++ b/drivers/virtio/virtio_pci_common.c
>>> @@ -254,8 +254,7 @@ void vp_del_vqs(struct virtio_device *vdev)
>>> 	if (vp_dev->msix_affinity_masks) {
>>> 		for (i = 0; i < vp_dev->msix_vectors; i++)
>>> -			if (vp_dev->msix_affinity_masks[i])
>>> -				free_cpumask_var(vp_dev->msix_affinity_masks[i]);
>>> +			free_cpumask_var(vp_dev->msix_affinity_masks[i]);
>>> 	}
>>> 	if (vp_dev->msix_enabled) {
>> 
>> After I sent this message, I realized that Christophe (copied here)
>> had already proposed a fix:
>> 
>> https://lore.kernel.org/lkml/20220414150855.2407137-4-dinechin@redhat.com/
>> 
>> Christophe,
>> 
>> Since free_cpumask_var() calls kfree() and kfree() is null-safe,
>> can we just drop this null verification and call free_cpumask_var() right away?
> 
> Apologies for the delay in responding, broken laptop…
> 
> In the case where CONFIG_CPUMASK_OFFSTACK is not defined, we have:
> 
> 	typedef struct cpumask cpumask_var_t[1];
> 
> So that vp_dev->msix_affinity_masks[i] is statically not null (that’s the warning)
> but also a static pointer, so not kfree-safe IMO.

… which also renders my own patch invalid :-/

Compiler warnings are good. Clearly not sufficient.


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

* Re: [PATCH] virtio-pci: Remove wrong address verification in vp_del_vqs()
  2022-04-28  9:51     ` Christophe Marie Francois Dupont de Dinechin
@ 2022-04-28  9:55       ` Christophe Marie Francois Dupont de Dinechin
  2022-04-28 11:03         ` Michael S. Tsirkin
  0 siblings, 1 reply; 7+ messages in thread
From: Christophe Marie Francois Dupont de Dinechin @ 2022-04-28  9:55 UTC (permalink / raw)
  To: Murilo Opsfelder Araujo
  Cc: Michael S. Tsirkin, Jason Wang, virtualization, linux-kernel,
	mopsfelder, Christophe de Dinechin



> On 28 Apr 2022, at 11:51, Christophe Marie Francois Dupont de Dinechin <cdupontd@redhat.com> wrote:
> 
> 
> 
>> On 28 Apr 2022, at 11:46, Christophe Marie Francois Dupont de Dinechin <cdupontd@redhat.com> wrote:
>> 
>> 
>> 
>>> On 15 Apr 2022, at 05:51, Murilo Opsfelder Araújo <muriloo@linux.ibm.com> wrote:
>>> 
>>> On 4/14/22 23:30, Murilo Opsfelder Araujo wrote:
>>>> GCC 12 enhanced -Waddress when comparing array address to null [0],
>>>> which warns:
>>>> drivers/virtio/virtio_pci_common.c: In function ‘vp_del_vqs’:
>>>> drivers/virtio/virtio_pci_common.c:257:29: warning: the comparison will always evaluate as ‘true’ for the pointer operand in ‘vp_dev->msix_affinity_masks + (sizetype)((long unsigned int)i * 256)’ must not be NULL [-Waddress]
>>>> 257 | if (vp_dev->msix_affinity_masks[i])
>>>> | ^~~~~~
>>>> In fact, the verification is comparing the result of a pointer
>>>> arithmetic, the address "msix_affinity_masks + i", which will always
>>>> evaluate to true.
>>>> Under the hood, free_cpumask_var() calls kfree(), which is safe to pass
>>>> NULL, not requiring non-null verification. So remove the verification
>>>> to make compiler happy (happy compiler, happy life).
>>>> [0] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102103
>>>> Signed-off-by: Murilo Opsfelder Araujo <muriloo@linux.ibm.com>
>>>> ---
>>>> drivers/virtio/virtio_pci_common.c | 3 +--
>>>> 1 file changed, 1 insertion(+), 2 deletions(-)
>>>> diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
>>>> index d724f676608b..5046efcffb4c 100644
>>>> --- a/drivers/virtio/virtio_pci_common.c
>>>> +++ b/drivers/virtio/virtio_pci_common.c
>>>> @@ -254,8 +254,7 @@ void vp_del_vqs(struct virtio_device *vdev)
>>>> 	if (vp_dev->msix_affinity_masks) {
>>>> 		for (i = 0; i < vp_dev->msix_vectors; i++)
>>>> -			if (vp_dev->msix_affinity_masks[i])
>>>> -				free_cpumask_var(vp_dev->msix_affinity_masks[i]);
>>>> +			free_cpumask_var(vp_dev->msix_affinity_masks[i]);
>>>> 	}
>>>> 	if (vp_dev->msix_enabled) {
>>> 
>>> After I sent this message, I realized that Christophe (copied here)
>>> had already proposed a fix:
>>> 
>>> https://lore.kernel.org/lkml/20220414150855.2407137-4-dinechin@redhat.com/
>>> 
>>> Christophe,
>>> 
>>> Since free_cpumask_var() calls kfree() and kfree() is null-safe,
>>> can we just drop this null verification and call free_cpumask_var() right away?
>> 
>> Apologies for the delay in responding, broken laptop…
>> 
>> In the case where CONFIG_CPUMASK_OFFSTACK is not defined, we have:
>> 
>> 	typedef struct cpumask cpumask_var_t[1];
>> 
>> So that vp_dev->msix_affinity_masks[i] is statically not null (that’s the warning)
>> but also a static pointer, so not kfree-safe IMO.
> 
> … which also renders my own patch invalid :-/
> 
> Compiler warnings are good. Clearly not sufficient.

Ah, I just noticed that free_cpumask_var is a noop in that case.

So yes, your fix is better :-)

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

* Re: [PATCH] virtio-pci: Remove wrong address verification in vp_del_vqs()
  2022-04-28  9:55       ` Christophe Marie Francois Dupont de Dinechin
@ 2022-04-28 11:03         ` Michael S. Tsirkin
  2022-04-28 11:52           ` Christophe Marie Francois Dupont de Dinechin
  0 siblings, 1 reply; 7+ messages in thread
From: Michael S. Tsirkin @ 2022-04-28 11:03 UTC (permalink / raw)
  To: Christophe Marie Francois Dupont de Dinechin
  Cc: Murilo Opsfelder Araujo, Jason Wang, virtualization,
	linux-kernel, mopsfelder, Christophe de Dinechin

On Thu, Apr 28, 2022 at 11:55:31AM +0200, Christophe Marie Francois Dupont de Dinechin wrote:
> 
> 
> > On 28 Apr 2022, at 11:51, Christophe Marie Francois Dupont de Dinechin <cdupontd@redhat.com> wrote:
> > 
> > 
> > 
> >> On 28 Apr 2022, at 11:46, Christophe Marie Francois Dupont de Dinechin <cdupontd@redhat.com> wrote:
> >> 
> >> 
> >> 
> >>> On 15 Apr 2022, at 05:51, Murilo Opsfelder Araújo <muriloo@linux.ibm.com> wrote:
> >>> 
> >>> On 4/14/22 23:30, Murilo Opsfelder Araujo wrote:
> >>>> GCC 12 enhanced -Waddress when comparing array address to null [0],
> >>>> which warns:
> >>>> drivers/virtio/virtio_pci_common.c: In function ‘vp_del_vqs’:
> >>>> drivers/virtio/virtio_pci_common.c:257:29: warning: the comparison will always evaluate as ‘true’ for the pointer operand in ‘vp_dev->msix_affinity_masks + (sizetype)((long unsigned int)i * 256)’ must not be NULL [-Waddress]
> >>>> 257 | if (vp_dev->msix_affinity_masks[i])
> >>>> | ^~~~~~
> >>>> In fact, the verification is comparing the result of a pointer
> >>>> arithmetic, the address "msix_affinity_masks + i", which will always
> >>>> evaluate to true.
> >>>> Under the hood, free_cpumask_var() calls kfree(), which is safe to pass
> >>>> NULL, not requiring non-null verification. So remove the verification
> >>>> to make compiler happy (happy compiler, happy life).
> >>>> [0] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102103
> >>>> Signed-off-by: Murilo Opsfelder Araujo <muriloo@linux.ibm.com>
> >>>> ---
> >>>> drivers/virtio/virtio_pci_common.c | 3 +--
> >>>> 1 file changed, 1 insertion(+), 2 deletions(-)
> >>>> diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
> >>>> index d724f676608b..5046efcffb4c 100644
> >>>> --- a/drivers/virtio/virtio_pci_common.c
> >>>> +++ b/drivers/virtio/virtio_pci_common.c
> >>>> @@ -254,8 +254,7 @@ void vp_del_vqs(struct virtio_device *vdev)
> >>>> 	if (vp_dev->msix_affinity_masks) {
> >>>> 		for (i = 0; i < vp_dev->msix_vectors; i++)
> >>>> -			if (vp_dev->msix_affinity_masks[i])
> >>>> -				free_cpumask_var(vp_dev->msix_affinity_masks[i]);
> >>>> +			free_cpumask_var(vp_dev->msix_affinity_masks[i]);
> >>>> 	}
> >>>> 	if (vp_dev->msix_enabled) {
> >>> 
> >>> After I sent this message, I realized that Christophe (copied here)
> >>> had already proposed a fix:
> >>> 
> >>> https://lore.kernel.org/lkml/20220414150855.2407137-4-dinechin@redhat.com/
> >>> 
> >>> Christophe,
> >>> 
> >>> Since free_cpumask_var() calls kfree() and kfree() is null-safe,
> >>> can we just drop this null verification and call free_cpumask_var() right away?
> >> 
> >> Apologies for the delay in responding, broken laptop…
> >> 
> >> In the case where CONFIG_CPUMASK_OFFSTACK is not defined, we have:
> >> 
> >> 	typedef struct cpumask cpumask_var_t[1];
> >> 
> >> So that vp_dev->msix_affinity_masks[i] is statically not null (that’s the warning)
> >> but also a static pointer, so not kfree-safe IMO.
> > 
> > … which also renders my own patch invalid :-/
> > 
> > Compiler warnings are good. Clearly not sufficient.
> 
> Ah, I just noticed that free_cpumask_var is a noop in that case.
> 
> So yes, your fix is better :-)

ACK then?


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

* Re: [PATCH] virtio-pci: Remove wrong address verification in vp_del_vqs()
  2022-04-28 11:03         ` Michael S. Tsirkin
@ 2022-04-28 11:52           ` Christophe Marie Francois Dupont de Dinechin
  0 siblings, 0 replies; 7+ messages in thread
From: Christophe Marie Francois Dupont de Dinechin @ 2022-04-28 11:52 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Murilo Opsfelder Araujo, Jason Wang, virtualization,
	linux-kernel, mopsfelder, Christophe de Dinechin

[Resend, still struggling with new laptop email settings]

> On 28 Apr 2022, at 13:03, Michael S. Tsirkin <mst@redhat.com> wrote:
> 
> On Thu, Apr 28, 2022 at 11:55:31AM +0200, Christophe Marie Francois Dupont de Dinechin wrote:
>> 
>> 
>>> On 28 Apr 2022, at 11:51, Christophe Marie Francois Dupont de Dinechin <cdupontd@redhat.com> wrote:
>>> 
>>> 
>>> 
>>>> On 28 Apr 2022, at 11:46, Christophe Marie Francois Dupont de Dinechin <cdupontd@redhat.com> wrote:
>>>> 
>>>> 
>>>> 
>>>>> On 15 Apr 2022, at 05:51, Murilo Opsfelder Araújo <muriloo@linux.ibm.com> wrote:
>>>>> 
>>>>> On 4/14/22 23:30, Murilo Opsfelder Araujo wrote:
>>>>>> GCC 12 enhanced -Waddress when comparing array address to null [0],
>>>>>> which warns:
>>>>>> drivers/virtio/virtio_pci_common.c: In function ‘vp_del_vqs’:
>>>>>> drivers/virtio/virtio_pci_common.c:257:29: warning: the comparison will always evaluate as ‘true’ for the pointer operand in ‘vp_dev->msix_affinity_masks + (sizetype)((long unsigned int)i * 256)’ must not be NULL [-Waddress]
>>>>>> 257 | if (vp_dev->msix_affinity_masks[i])
>>>>>> | ^~~~~~
>>>>>> In fact, the verification is comparing the result of a pointer
>>>>>> arithmetic, the address "msix_affinity_masks + i", which will always
>>>>>> evaluate to true.
>>>>>> Under the hood, free_cpumask_var() calls kfree(), which is safe to pass
>>>>>> NULL, not requiring non-null verification. So remove the verification
>>>>>> to make compiler happy (happy compiler, happy life).
>>>>>> [0] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102103
>>>>>> Signed-off-by: Murilo Opsfelder Araujo <muriloo@linux.ibm.com>
>>>>>> ---
>>>>>> drivers/virtio/virtio_pci_common.c | 3 +--
>>>>>> 1 file changed, 1 insertion(+), 2 deletions(-)
>>>>>> diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
>>>>>> index d724f676608b..5046efcffb4c 100644
>>>>>> --- a/drivers/virtio/virtio_pci_common.c
>>>>>> +++ b/drivers/virtio/virtio_pci_common.c
>>>>>> @@ -254,8 +254,7 @@ void vp_del_vqs(struct virtio_device *vdev)
>>>>>> 	if (vp_dev->msix_affinity_masks) {
>>>>>> 		for (i = 0; i < vp_dev->msix_vectors; i++)
>>>>>> -			if (vp_dev->msix_affinity_masks[i])
>>>>>> -				free_cpumask_var(vp_dev->msix_affinity_masks[i]);
>>>>>> +			free_cpumask_var(vp_dev->msix_affinity_masks[i]);
>>>>>> 	}
>>>>>> 	if (vp_dev->msix_enabled) {
>>>>> 
>>>>> After I sent this message, I realized that Christophe (copied here)
>>>>> had already proposed a fix:
>>>>> 
>>>>> https://lore.kernel.org/lkml/20220414150855.2407137-4-dinechin@redhat.com/
>>>>> 
>>>>> Christophe,
>>>>> 
>>>>> Since free_cpumask_var() calls kfree() and kfree() is null-safe,
>>>>> can we just drop this null verification and call free_cpumask_var() right away?
>>>> 
>>>> Apologies for the delay in responding, broken laptop…
>>>> 
>>>> In the case where CONFIG_CPUMASK_OFFSTACK is not defined, we have:
>>>> 
>>>> 	typedef struct cpumask cpumask_var_t[1];
>>>> 
>>>> So that vp_dev->msix_affinity_masks[i] is statically not null (that’s the warning)
>>>> but also a static pointer, so not kfree-safe IMO.
>>> 
>>> … which also renders my own patch invalid :-/
>>> 
>>> Compiler warnings are good. Clearly not sufficient.
>> 
>> Ah, I just noticed that free_cpumask_var is a noop in that case.
>> 
>> So yes, your fix is better :-)
> 
> ACK then?

Yes.

Acked-by: Christophe de Dinechin <dinechin@redhat.com>

> 


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

end of thread, other threads:[~2022-04-28 11:53 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-15  2:30 [PATCH] virtio-pci: Remove wrong address verification in vp_del_vqs() Murilo Opsfelder Araujo
2022-04-15  3:51 ` Murilo Opsfelder Araújo
2022-04-28  9:46   ` Christophe Marie Francois Dupont de Dinechin
2022-04-28  9:51     ` Christophe Marie Francois Dupont de Dinechin
2022-04-28  9:55       ` Christophe Marie Francois Dupont de Dinechin
2022-04-28 11:03         ` Michael S. Tsirkin
2022-04-28 11:52           ` Christophe Marie Francois Dupont de Dinechin

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).