From: "Michael S. Tsirkin" <mst@redhat.com>
To: Christophe Marie Francois Dupont de Dinechin <cdupontd@redhat.com>
Cc: linux-kernel@vger.kernel.org,
virtualization@lists.linux-foundation.org, mopsfelder@gmail.com,
Murilo Opsfelder Araujo <muriloo@linux.ibm.com>,
Christophe de Dinechin <dinechin@redhat.com>
Subject: Re: [PATCH] virtio-pci: Remove wrong address verification in vp_del_vqs()
Date: Thu, 28 Apr 2022 07:03:51 -0400 [thread overview]
Message-ID: <20220428070345-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <2F2EFFE9-5174-49A8-A71F-EE134D387E07@redhat.com>
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?
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Christophe Marie Francois Dupont de Dinechin <cdupontd@redhat.com>
Cc: Murilo Opsfelder Araujo <muriloo@linux.ibm.com>,
Jason Wang <jasowang@redhat.com>,
virtualization@lists.linux-foundation.org,
linux-kernel@vger.kernel.org, mopsfelder@gmail.com,
Christophe de Dinechin <dinechin@redhat.com>
Subject: Re: [PATCH] virtio-pci: Remove wrong address verification in vp_del_vqs()
Date: Thu, 28 Apr 2022 07:03:51 -0400 [thread overview]
Message-ID: <20220428070345-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <2F2EFFE9-5174-49A8-A71F-EE134D387E07@redhat.com>
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?
next prev parent reply other threads:[~2022-04-28 11:04 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
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:46 ` Christophe Marie Francois Dupont de Dinechin
2022-04-28 9:51 ` 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 9:55 ` Christophe Marie Francois Dupont de Dinechin
2022-04-28 11:03 ` Michael S. Tsirkin [this message]
2022-04-28 11:03 ` Michael S. Tsirkin
2022-04-28 11:43 ` Christophe Marie Francois Dupont de Dinechin
2022-04-28 11:52 ` Christophe Marie Francois Dupont de Dinechin
2022-04-28 11:52 ` Christophe Marie Francois Dupont de Dinechin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220428070345-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=cdupontd@redhat.com \
--cc=dinechin@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mopsfelder@gmail.com \
--cc=muriloo@linux.ibm.com \
--cc=virtualization@lists.linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.