]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Add missing lock in qemuProcessHandleMonitorEOF
authorPeng Liang <liangpeng10@huawei.com>
Wed, 24 Feb 2021 11:28:23 +0000 (19:28 +0800)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 24 Feb 2021 14:00:51 +0000 (15:00 +0100)
qemuMonitorUnregister will be called in multiple threads (e.g. threads
in rpc worker pool and the vm event thread).  In some cases, it isn't
protected by the monitor lock, which may lead to call g_source_unref
more than one time and a use-after-free problem eventually.

Add the missing lock in qemuProcessHandleMonitorEOF (which is the only
position missing lock of monitor I found).

Suggested-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Peng Liang <liangpeng10@huawei.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_process.c

index d930ff9a74f6dd3962988afcd0fa202e21d71802..bfa742577f3222126f0605d950b0d4cc253311a1 100644 (file)
@@ -318,7 +318,9 @@ qemuProcessHandleMonitorEOF(qemuMonitorPtr mon,
     /* We don't want this EOF handler to be called over and over while the
      * thread is waiting for a job.
      */
+    virObjectLock(mon);
     qemuMonitorUnregister(mon);
+    virObjectUnlock(mon);
 
     /* We don't want any cleanup from EOF handler (or any other
      * thread) to enter qemu namespace. */