mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-26 03:21:44 +03:00
qemu: Set identity for the reconnect all thread
https://bugzilla.redhat.com/show_bug.cgi?id=1631622 If polkit authentication is enabled, an attempt to open the connection failed during virAccessDriverPolkitGetCaller when the call to virIdentityGetCurrent returned NULL resulting in the errors: virAccessDriverPolkitGetCaller:87 : access denied: Policy kit denied action org.libvirt.api.connect.getattr from <anonymous> Because qemuProcessReconnect runs in a thread during daemonRunStateInit processing it doesn't have the thread local identity. Thus when the virGetConnectNWFilter is called as part of the qemuProcessFiltersInstantiate when virDomainConfNWFilterInstantiate is run the attempt to get the idenity fails and results in the anonymous error above. To fix this, let's grab/use the virIdenityPtr of the process that will be creating the thread, e.g. what daemonRunStateInit has set and use that for our thread. That way any other similar processing that uses/requires an identity for any other call that would have previously been successfully run won't fail in a similar manner. Signed-off-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
605496be60
commit
b04b82f8cb
@ -81,6 +81,7 @@
|
||||
#include "netdev_bandwidth_conf.h"
|
||||
#include "virresctrl.h"
|
||||
#include "virvsock.h"
|
||||
#include "viridentity.h"
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_QEMU
|
||||
|
||||
@ -7741,6 +7742,7 @@ qemuProcessRefreshCPU(virQEMUDriverPtr driver,
|
||||
struct qemuProcessReconnectData {
|
||||
virQEMUDriverPtr driver;
|
||||
virDomainObjPtr obj;
|
||||
virIdentityPtr identity;
|
||||
};
|
||||
/*
|
||||
* Open an existing VM's monitor, re-detect VCPU threads
|
||||
@ -7778,6 +7780,8 @@ qemuProcessReconnect(void *opaque)
|
||||
bool retry = true;
|
||||
bool tryMonReconn = false;
|
||||
|
||||
virIdentitySetCurrent(data->identity);
|
||||
virObjectUnref(data->identity);
|
||||
VIR_FREE(data);
|
||||
|
||||
qemuDomainObjRestoreJob(obj, &oldjob);
|
||||
@ -8015,6 +8019,7 @@ qemuProcessReconnect(void *opaque)
|
||||
virObjectUnref(cfg);
|
||||
virObjectUnref(caps);
|
||||
virNWFilterUnlockFilterUpdates();
|
||||
virIdentitySetCurrent(NULL);
|
||||
return;
|
||||
|
||||
error:
|
||||
@ -8062,6 +8067,7 @@ qemuProcessReconnectHelper(virDomainObjPtr obj,
|
||||
|
||||
memcpy(data, src, sizeof(*data));
|
||||
data->obj = obj;
|
||||
data->identity = virIdentityGetCurrent();
|
||||
|
||||
virNWFilterReadLockFilterUpdates();
|
||||
|
||||
@ -8085,6 +8091,7 @@ qemuProcessReconnectHelper(virDomainObjPtr obj,
|
||||
|
||||
virDomainObjEndAPI(&obj);
|
||||
virNWFilterUnlockFilterUpdates();
|
||||
virObjectUnref(data->identity);
|
||||
VIR_FREE(data);
|
||||
return -1;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user