[PATCH 2/3] qemu: Set "qemu-event" thread identity

Daniel P. Berrangé berrange at redhat.com
Tue Oct 26 14:31:08 UTC 2021


On Tue, Oct 26, 2021 at 12:17:07PM +0200, Michal Privoznik wrote:
> It may happen that qemuProcessStop() is called from "qemu-event"
> thread. But this thread doesn't have any virIdentity set
> (virIdentity being thread local) and therefore it may be unable
> to open connection to secondary drivers. It is unable to do so
> in split daemon scenario, because in there opening a connection
> is coupled with copying current thread identity onto the
> connection. Code-wise, virIdentityGetCurrent() returns NULL which
> in turn makes virGetConnectGeneric() fail. This problem does not
> occur in monolithic daemon scenario, because no identity copying
> is done there.
> 
> Long story short, inability to open secondary driver connection
> can lead to unwanted results. Therefore, do what
> qemuProcessReconnectHelper() does - set the new thread identity
> to be the one of the caller.
> 
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2013573
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  src/qemu/qemu_driver.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index a8bf0ecc6f..70b5f37e6b 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -571,6 +571,7 @@ qemuStateInitialize(bool privileged,
>      size_t i;
>      const char *defsecmodel = NULL;
>      g_autofree virSecurityManager **sec_managers = NULL;
> +    g_autoptr(virIdentity) identity = virIdentityGetCurrent();

Note, qemuStateInitialize will run with the system identity, so this
is functionally the same as the next patch.

>  
>      qemu_driver = g_new0(virQEMUDriver, 1);
>  
> @@ -915,7 +916,7 @@ qemuStateInitialize(bool privileged,
>       * events that will be dispatched to the worker pool */
>      qemu_driver->workerPool = virThreadPoolNewFull(0, 1, 0, qemuProcessEventHandler,
>                                                     "qemu-event",
> -                                                   NULL,
> +                                                   identity,
>                                                     qemu_driver);
>      if (!qemu_driver->workerPool)
>          goto error;

Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list