From: Peter Krempa Date: Tue, 26 Nov 2019 12:16:36 +0000 (+0100) Subject: qemu: blockjob: Fix deadlock when terminating job with invalid data X-Git-Tag: v5.10.0-rc2~12 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8622498f6e42d29140f5ca63393ef29e2ffc0d51;p=thirdparty%2Flibvirt.git qemu: blockjob: Fix deadlock when terminating job with invalid data We must exit the monitor prior to refusing other work, otherwise the VM object will become unusable. This bug was introduced in commit v5.5.0-244-gc412383796 but thankfully the code path was not excercised without QEMU_CAPS_BLOCKDEV. Signed-off-by: Peter Krempa Reviewed-by: Cole Robinson --- diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 2283d49c61..818e36435c 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -1305,14 +1305,14 @@ qemuBlockJobEventProcessConcluded(qemuBlockJobDataPtr job, dismissed = true; } + if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) + goto cleanup; + if (job->invalidData) { VIR_WARN("terminating job '%s' with invalid data", job->name); goto cleanup; } - if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) - goto cleanup; - if ((job->newstate == QEMU_BLOCKJOB_STATE_COMPLETED || job->newstate == QEMU_BLOCKJOB_STATE_FAILED) && job->state == QEMU_BLOCKJOB_STATE_ABORTING)