From 40cc355c9223e17b54b66fdaedd93e9f6c669704 Mon Sep 17 00:00:00 2001 From: Pavel Hrdina Date: Mon, 7 Aug 2017 14:42:58 +0200 Subject: [PATCH] qemu: fix nwfilter deadlock in qemuProcessReconnect 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 --- 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; -- GitLab