From: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com>
To: linux-kernel@vger.kernel.org
Cc: kvm@vger.kernel.org, virtualization@lists.linux.dev,
netdev@vger.kernel.org, sgarzare@redhat.com, mst@redhat.com,
stefanha@redhat.com, jasowangio@gmail.com, eperezma@redhat.com,
andrey.drobyshev@virtuozzo.com
Subject: [PATCH] vhost: clear vq->worker under vq->mutex when freeing workers
Date: Thu, 23 Jul 2026 18:33:10 +0300 [thread overview]
Message-ID: <20260723153310.745855-1-andrey.drobyshev@virtuozzo.com> (raw)
Every other update of vq->worker is done under vq->mutex - the worker
attach/swap ioctls and vhost_worker_killed(). vhost_workers_free() is
the sole exception: it clears vq->worker without holding the lock.
The effect is harmless in practice, as this only happens while the
owning process (and thus the whole device) is dying, but the lockless
write is inconsistent with the rest of the code. Clear vq->worker under
vq->mutex, like everyone else, so that all writers of vq->worker follow
the same locking rule.
This issue was found by Sashiko AI review.
Signed-off-by: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com>
---
drivers/vhost/vhost.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index 4c525b3e16ea..dbb6cb5eccea 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -722,13 +722,19 @@ static void vhost_worker_destroy(struct vhost_dev *dev,
static void vhost_workers_free(struct vhost_dev *dev)
{
struct vhost_worker *worker;
+ struct vhost_virtqueue *vq;
unsigned long i;
if (!dev->use_worker)
return;
- for (i = 0; i < dev->nvqs; i++)
- rcu_assign_pointer(dev->vqs[i]->worker, NULL);
+ for (i = 0; i < dev->nvqs; i++) {
+ vq = dev->vqs[i];
+
+ mutex_lock(&vq->mutex);
+ rcu_assign_pointer(vq->worker, NULL);
+ mutex_unlock(&vq->mutex);
+ }
/*
* Free the default worker we created and cleanup workers userspace
* created but couldn't clean up (it forgot or crashed).
--
2.47.1
next reply other threads:[~2026-07-23 15:33 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-23 15:33 Andrey Drobyshev [this message]
2026-08-06 13:35 ` [PATCH] vhost: clear vq->worker under vq->mutex when freeing workers Stefano Garzarella
2026-08-06 13:53 ` Sean Christopherson
2026-08-06 14:12 ` Stefano Garzarella
2026-08-06 14:40 ` Stefano Garzarella
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=20260723153310.745855-1-andrey.drobyshev@virtuozzo.com \
--to=andrey.drobyshev@virtuozzo.com \
--cc=eperezma@redhat.com \
--cc=jasowangio@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=sgarzare@redhat.com \
--cc=stefanha@redhat.com \
--cc=virtualization@lists.linux.dev \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox