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

Michal Prívozník mprivozn at redhat.com
Tue Oct 26 14:49:55 UTC 2021


On 10/26/21 4:31 PM, Daniel P. Berrangé wrote:
> 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.

Yes, but for some reason that patch looks like a hack to me. But I can
polish it and we can go with that one instead.

Michal




More information about the libvir-list mailing list