[libvirt] [PATCH 2/2] qemu: fix nwfilter deadlock in qemuProcessReconnect

Pavel Hrdina posted 2 patches 7 years, 9 months ago
[libvirt] [PATCH 2/2] qemu: fix nwfilter deadlock in qemuProcessReconnect
Posted by Pavel Hrdina 7 years, 9 months ago
The correct lock order is:

  nwfilter driver lock (not used in this code path)
  nwfilter update lock
  virt driver lock (not used in this code path)
  domain object lock

but the current code have this order:

  domain object lock
  nwfilter update lock

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
---
 src/qemu/qemu_process.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 0aecce3b1f..fed2bc5882 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -6813,8 +6813,6 @@ qemuProcessReconnect(void *opaque)
     if (qemuDomainMasterKeyReadFile(priv) < 0)
         goto error;
 
-    virNWFilterReadLockFilterUpdates();
-
     VIR_DEBUG("Reconnect monitor to %p '%s'", obj, obj->def->name);
 
     /* XXX check PID liveliness & EXE path */
@@ -7043,6 +7041,8 @@ qemuProcessReconnectHelper(virDomainObjPtr obj,
     memcpy(data, src, sizeof(*data));
     data->obj = obj;
 
+    virNWFilterReadLockFilterUpdates();
+
     /* this lock and reference will be eventually transferred to the thread
      * that handles the reconnect */
     virObjectLock(obj);
@@ -7068,6 +7068,7 @@ qemuProcessReconnectHelper(virDomainObjPtr obj,
         qemuDomainRemoveInactive(src->driver, obj);
 
         virDomainObjEndAPI(&obj);
+        virNWFilterUnlockFilterUpdates();
         virObjectUnref(data->conn);
         VIR_FREE(data);
         return -1;
-- 
2.13.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 2/2] qemu: fix nwfilter deadlock in qemuProcessReconnect
Posted by Ján Tomko 7 years, 9 months ago
On Mon, Aug 07, 2017 at 04:31:31PM +0200, Pavel Hrdina wrote:
>The correct lock order is:
>
>  nwfilter driver lock (not used in this code path)
>  nwfilter update lock
>  virt driver lock (not used in this code path)
>  domain object lock
>
>but the current code have this order:
>
>  domain object lock
>  nwfilter update lock
>
>Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
>---
> src/qemu/qemu_process.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)

ACK

Jan
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list