mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-22 12:35:17 +00:00
Fix sec label setup when attaching to QEMU processes
When attaching to a QEMU process, the def->seclabels array is going to be empty. The qemuProcessAttach method must thus populate it with data for the security drivers. Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
359f4b11a6
commit
06e788e518
@ -4479,6 +4479,7 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
virDomainPausedReason reason;
|
||||
virSecurityLabelPtr seclabel = NULL;
|
||||
virSecurityLabelDefPtr seclabeldef = NULL;
|
||||
bool seclabelgen = false;
|
||||
virSecurityManagerPtr* sec_managers = NULL;
|
||||
const char *model;
|
||||
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
||||
@ -4529,10 +4530,14 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
goto error;
|
||||
|
||||
for (i = 0; sec_managers[i]; i++) {
|
||||
seclabelgen = false;
|
||||
model = virSecurityManagerGetModel(sec_managers[i]);
|
||||
seclabeldef = virDomainDefGetSecurityLabelDef(vm->def, model);
|
||||
if (seclabeldef == NULL)
|
||||
goto error;
|
||||
if (seclabeldef == NULL) {
|
||||
if (!(seclabeldef = virDomainDefGenSecurityLabelDef(model)))
|
||||
goto error;
|
||||
seclabelgen = true;
|
||||
}
|
||||
seclabeldef->type = VIR_DOMAIN_SECLABEL_STATIC;
|
||||
if (VIR_ALLOC(seclabel) < 0)
|
||||
goto error;
|
||||
@ -4546,6 +4551,12 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
if (VIR_STRDUP(seclabeldef->label, seclabel->label) < 0)
|
||||
goto error;
|
||||
VIR_FREE(seclabel);
|
||||
|
||||
if (seclabelgen) {
|
||||
if (VIR_APPEND_ELEMENT(vm->def->seclabels, vm->def->nseclabels, seclabeldef) < 0)
|
||||
goto error;
|
||||
seclabelgen = false;
|
||||
}
|
||||
}
|
||||
|
||||
VIR_DEBUG("Creating domain log file");
|
||||
@ -4692,6 +4703,8 @@ error:
|
||||
VIR_FORCE_CLOSE(logfile);
|
||||
VIR_FREE(seclabel);
|
||||
VIR_FREE(sec_managers);
|
||||
if (seclabelgen)
|
||||
virSecurityLabelDefFree(seclabeldef);
|
||||
virDomainChrSourceDefFree(monConfig);
|
||||
virObjectUnref(cfg);
|
||||
virObjectUnref(caps);
|
||||
|
Loading…
x
Reference in New Issue
Block a user