linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net v3 0/3] vsock/virtio: enable VQs early on probe and finish the setup before using them
@ 2022-03-23 17:36 Stefano Garzarella
  2022-03-23 17:36 ` [PATCH net v3 1/3] vsock/virtio: initialize vdev->priv before using VQs Stefano Garzarella
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Stefano Garzarella @ 2022-03-23 17:36 UTC (permalink / raw)
  To: netdev
  Cc: Jakub Kicinski, Michael S. Tsirkin, Asias He, Arseny Krasnov,
	Stefan Hajnoczi, Paolo Abeni, linux-kernel, Stefano Garzarella,
	virtualization, kvm, David S. Miller

The first patch fixes a virtio-spec violation. The other two patches
complete the driver configuration before using the VQs in the probe.

The patch order should simplify backporting in stable branches.

v3:
- re-ordered the patch to improve bisectability [MST]

v2: https://lore.kernel.org/netdev/20220323084954.11769-1-sgarzare@redhat.com/
v1: https://lore.kernel.org/netdev/20220322103823.83411-1-sgarzare@redhat.com/

Stefano Garzarella (3):
  vsock/virtio: initialize vdev->priv before using VQs
  vsock/virtio: read the negotiated features before using VQs
  vsock/virtio: enable VQs early on probe

 net/vmw_vsock/virtio_transport.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

-- 
2.35.1


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

* [PATCH net v3 1/3] vsock/virtio: initialize vdev->priv before using VQs
  2022-03-23 17:36 [PATCH net v3 0/3] vsock/virtio: enable VQs early on probe and finish the setup before using them Stefano Garzarella
@ 2022-03-23 17:36 ` Stefano Garzarella
  2022-03-23 17:36 ` [PATCH net v3 2/3] vsock/virtio: read the negotiated features " Stefano Garzarella
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Stefano Garzarella @ 2022-03-23 17:36 UTC (permalink / raw)
  To: netdev
  Cc: Jakub Kicinski, Michael S. Tsirkin, Asias He, Arseny Krasnov,
	Stefan Hajnoczi, Paolo Abeni, linux-kernel, Stefano Garzarella,
	virtualization, kvm, David S. Miller

When we fill VQs with empty buffers and kick the host, it may send
an interrupt. `vdev->priv` must be initialized before this since it
is used in the virtqueue callbacks.

Fixes: 0deab087b16a ("vsock/virtio: use RCU to avoid use-after-free on the_virtio_vsock")
Suggested-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
---
 net/vmw_vsock/virtio_transport.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c
index 5afc194a58bb..3e5513934c9f 100644
--- a/net/vmw_vsock/virtio_transport.c
+++ b/net/vmw_vsock/virtio_transport.c
@@ -622,6 +622,8 @@ static int virtio_vsock_probe(struct virtio_device *vdev)
 	INIT_WORK(&vsock->event_work, virtio_transport_event_work);
 	INIT_WORK(&vsock->send_pkt_work, virtio_transport_send_pkt_work);
 
+	vdev->priv = vsock;
+
 	mutex_lock(&vsock->tx_lock);
 	vsock->tx_run = true;
 	mutex_unlock(&vsock->tx_lock);
@@ -639,7 +641,6 @@ static int virtio_vsock_probe(struct virtio_device *vdev)
 	if (virtio_has_feature(vdev, VIRTIO_VSOCK_F_SEQPACKET))
 		vsock->seqpacket_allow = true;
 
-	vdev->priv = vsock;
 	rcu_assign_pointer(the_virtio_vsock, vsock);
 
 	mutex_unlock(&the_virtio_vsock_mutex);
-- 
2.35.1


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

* [PATCH net v3 2/3] vsock/virtio: read the negotiated features before using VQs
  2022-03-23 17:36 [PATCH net v3 0/3] vsock/virtio: enable VQs early on probe and finish the setup before using them Stefano Garzarella
  2022-03-23 17:36 ` [PATCH net v3 1/3] vsock/virtio: initialize vdev->priv before using VQs Stefano Garzarella
@ 2022-03-23 17:36 ` Stefano Garzarella
  2022-03-23 17:36 ` [PATCH net v3 3/3] vsock/virtio: enable VQs early on probe Stefano Garzarella
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Stefano Garzarella @ 2022-03-23 17:36 UTC (permalink / raw)
  To: netdev
  Cc: Jakub Kicinski, Michael S. Tsirkin, Asias He, Arseny Krasnov,
	Stefan Hajnoczi, Paolo Abeni, linux-kernel, Stefano Garzarella,
	virtualization, kvm, David S. Miller

Complete the driver configuration, reading the negotiated features,
before using the VQs in the virtio_vsock_probe().

Fixes: 53efbba12cc7 ("virtio/vsock: enable SEQPACKET for transport")
Suggested-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
---
 net/vmw_vsock/virtio_transport.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c
index 3e5513934c9f..3954d3be9083 100644
--- a/net/vmw_vsock/virtio_transport.c
+++ b/net/vmw_vsock/virtio_transport.c
@@ -622,6 +622,9 @@ static int virtio_vsock_probe(struct virtio_device *vdev)
 	INIT_WORK(&vsock->event_work, virtio_transport_event_work);
 	INIT_WORK(&vsock->send_pkt_work, virtio_transport_send_pkt_work);
 
+	if (virtio_has_feature(vdev, VIRTIO_VSOCK_F_SEQPACKET))
+		vsock->seqpacket_allow = true;
+
 	vdev->priv = vsock;
 
 	mutex_lock(&vsock->tx_lock);
@@ -638,9 +641,6 @@ static int virtio_vsock_probe(struct virtio_device *vdev)
 	vsock->event_run = true;
 	mutex_unlock(&vsock->event_lock);
 
-	if (virtio_has_feature(vdev, VIRTIO_VSOCK_F_SEQPACKET))
-		vsock->seqpacket_allow = true;
-
 	rcu_assign_pointer(the_virtio_vsock, vsock);
 
 	mutex_unlock(&the_virtio_vsock_mutex);
-- 
2.35.1


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

* [PATCH net v3 3/3] vsock/virtio: enable VQs early on probe
  2022-03-23 17:36 [PATCH net v3 0/3] vsock/virtio: enable VQs early on probe and finish the setup before using them Stefano Garzarella
  2022-03-23 17:36 ` [PATCH net v3 1/3] vsock/virtio: initialize vdev->priv before using VQs Stefano Garzarella
  2022-03-23 17:36 ` [PATCH net v3 2/3] vsock/virtio: read the negotiated features " Stefano Garzarella
@ 2022-03-23 17:36 ` Stefano Garzarella
  2022-03-23 22:37 ` [PATCH net v3 0/3] vsock/virtio: enable VQs early on probe and finish the setup before using them Michael S. Tsirkin
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Stefano Garzarella @ 2022-03-23 17:36 UTC (permalink / raw)
  To: netdev
  Cc: Jakub Kicinski, Michael S. Tsirkin, Asias He, Arseny Krasnov,
	Stefan Hajnoczi, Paolo Abeni, linux-kernel, Stefano Garzarella,
	virtualization, kvm, David S. Miller

virtio spec requires drivers to set DRIVER_OK before using VQs.
This is set automatically after probe returns, but virtio-vsock
driver uses VQs in the probe function to fill rx and event VQs
with new buffers.

Let's fix this, calling virtio_device_ready() before using VQs
in the probe function.

Fixes: 0ea9e1d3a9e3 ("VSOCK: Introduce virtio_transport.ko")
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
---
 net/vmw_vsock/virtio_transport.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c
index 3954d3be9083..ba1c8cc0c467 100644
--- a/net/vmw_vsock/virtio_transport.c
+++ b/net/vmw_vsock/virtio_transport.c
@@ -627,6 +627,8 @@ static int virtio_vsock_probe(struct virtio_device *vdev)
 
 	vdev->priv = vsock;
 
+	virtio_device_ready(vdev);
+
 	mutex_lock(&vsock->tx_lock);
 	vsock->tx_run = true;
 	mutex_unlock(&vsock->tx_lock);
-- 
2.35.1


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

* Re: [PATCH net v3 0/3] vsock/virtio: enable VQs early on probe and finish the setup before using them
  2022-03-23 17:36 [PATCH net v3 0/3] vsock/virtio: enable VQs early on probe and finish the setup before using them Stefano Garzarella
                   ` (2 preceding siblings ...)
  2022-03-23 17:36 ` [PATCH net v3 3/3] vsock/virtio: enable VQs early on probe Stefano Garzarella
@ 2022-03-23 22:37 ` Michael S. Tsirkin
  2022-03-24  9:20 ` Stefan Hajnoczi
  2022-03-25  1:40 ` patchwork-bot+netdevbpf
  5 siblings, 0 replies; 7+ messages in thread
From: Michael S. Tsirkin @ 2022-03-23 22:37 UTC (permalink / raw)
  To: Stefano Garzarella
  Cc: netdev, Jakub Kicinski, Asias He, Arseny Krasnov,
	Stefan Hajnoczi, Paolo Abeni, linux-kernel, virtualization, kvm,
	David S. Miller

On Wed, Mar 23, 2022 at 06:36:22PM +0100, Stefano Garzarella wrote:
> The first patch fixes a virtio-spec violation. The other two patches
> complete the driver configuration before using the VQs in the probe.
> 
> The patch order should simplify backporting in stable branches.


Series:

Acked-by: Michael S. Tsirkin <mst@redhat.com>

> v3:
> - re-ordered the patch to improve bisectability [MST]
> 
> v2: https://lore.kernel.org/netdev/20220323084954.11769-1-sgarzare@redhat.com/
> v1: https://lore.kernel.org/netdev/20220322103823.83411-1-sgarzare@redhat.com/
> 
> Stefano Garzarella (3):
>   vsock/virtio: initialize vdev->priv before using VQs
>   vsock/virtio: read the negotiated features before using VQs
>   vsock/virtio: enable VQs early on probe
> 
>  net/vmw_vsock/virtio_transport.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> -- 
> 2.35.1


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

* Re: [PATCH net v3 0/3] vsock/virtio: enable VQs early on probe and finish the setup before using them
  2022-03-23 17:36 [PATCH net v3 0/3] vsock/virtio: enable VQs early on probe and finish the setup before using them Stefano Garzarella
                   ` (3 preceding siblings ...)
  2022-03-23 22:37 ` [PATCH net v3 0/3] vsock/virtio: enable VQs early on probe and finish the setup before using them Michael S. Tsirkin
@ 2022-03-24  9:20 ` Stefan Hajnoczi
  2022-03-25  1:40 ` patchwork-bot+netdevbpf
  5 siblings, 0 replies; 7+ messages in thread
From: Stefan Hajnoczi @ 2022-03-24  9:20 UTC (permalink / raw)
  To: Stefano Garzarella
  Cc: netdev, Jakub Kicinski, Michael S. Tsirkin, Asias He,
	Arseny Krasnov, Paolo Abeni, linux-kernel, virtualization, kvm,
	David S. Miller

[-- Attachment #1: Type: text/plain, Size: 1247 bytes --]

On Wed, Mar 23, 2022 at 06:36:22PM +0100, Stefano Garzarella wrote:
> The first patch fixes a virtio-spec violation. The other two patches
> complete the driver configuration before using the VQs in the probe.
> 
> The patch order should simplify backporting in stable branches.
> 
> v3:
> - re-ordered the patch to improve bisectability [MST]
> 
> v2: https://lore.kernel.org/netdev/20220323084954.11769-1-sgarzare@redhat.com/
> v1: https://lore.kernel.org/netdev/20220322103823.83411-1-sgarzare@redhat.com/
> 
> Stefano Garzarella (3):
>   vsock/virtio: initialize vdev->priv before using VQs
>   vsock/virtio: read the negotiated features before using VQs
>   vsock/virtio: enable VQs early on probe
> 
>  net/vmw_vsock/virtio_transport.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> -- 
> 2.35.1
> 

A subtle point is that we still drop events and rx packets during the
window where DRIVER_OK has been set but vqs haven't been filled.
This is acceptable because it's unavoidable and equivalent to events
happening before DRIVER_OK is set. What this revision *does* fix is that
vq used buffer notifications are no longer lost. Good.

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH net v3 0/3] vsock/virtio: enable VQs early on probe and finish the setup before using them
  2022-03-23 17:36 [PATCH net v3 0/3] vsock/virtio: enable VQs early on probe and finish the setup before using them Stefano Garzarella
                   ` (4 preceding siblings ...)
  2022-03-24  9:20 ` Stefan Hajnoczi
@ 2022-03-25  1:40 ` patchwork-bot+netdevbpf
  5 siblings, 0 replies; 7+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-03-25  1:40 UTC (permalink / raw)
  To: Stefano Garzarella
  Cc: netdev, kuba, mst, asias, arseny.krasnov, stefanha, pabeni,
	linux-kernel, virtualization, kvm, davem

Hello:

This series was applied to netdev/net.git (master)
by Jakub Kicinski <kuba@kernel.org>:

On Wed, 23 Mar 2022 18:36:22 +0100 you wrote:
> The first patch fixes a virtio-spec violation. The other two patches
> complete the driver configuration before using the VQs in the probe.
> 
> The patch order should simplify backporting in stable branches.
> 
> v3:
> - re-ordered the patch to improve bisectability [MST]
> 
> [...]

Here is the summary with links:
  - [net,v3,1/3] vsock/virtio: initialize vdev->priv before using VQs
    https://git.kernel.org/netdev/net/c/4b5f1ad5566a
  - [net,v3,2/3] vsock/virtio: read the negotiated features before using VQs
    https://git.kernel.org/netdev/net/c/c1011c0b3a9c
  - [net,v3,3/3] vsock/virtio: enable VQs early on probe
    https://git.kernel.org/netdev/net/c/88704454ef8b

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



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

end of thread, other threads:[~2022-03-25  1:44 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-23 17:36 [PATCH net v3 0/3] vsock/virtio: enable VQs early on probe and finish the setup before using them Stefano Garzarella
2022-03-23 17:36 ` [PATCH net v3 1/3] vsock/virtio: initialize vdev->priv before using VQs Stefano Garzarella
2022-03-23 17:36 ` [PATCH net v3 2/3] vsock/virtio: read the negotiated features " Stefano Garzarella
2022-03-23 17:36 ` [PATCH net v3 3/3] vsock/virtio: enable VQs early on probe Stefano Garzarella
2022-03-23 22:37 ` [PATCH net v3 0/3] vsock/virtio: enable VQs early on probe and finish the setup before using them Michael S. Tsirkin
2022-03-24  9:20 ` Stefan Hajnoczi
2022-03-25  1:40 ` patchwork-bot+netdevbpf

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