mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-23 03:42:19 +00:00
qemu_security: Introduce ImageLabel APIs
Just like we need wrappers over other virSecurityManager APIs, we need one for virSecurityManagerSetImageLabel and virSecurityManagerRestoreImageLabel. Otherwise we might end up relabelling device in wrong namespace. Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
c89a6e7878
commit
c2130c0d47
@ -31,6 +31,7 @@
|
|||||||
#include "qemu_parse_command.h"
|
#include "qemu_parse_command.h"
|
||||||
#include "qemu_capabilities.h"
|
#include "qemu_capabilities.h"
|
||||||
#include "qemu_migration.h"
|
#include "qemu_migration.h"
|
||||||
|
#include "qemu_security.h"
|
||||||
#include "viralloc.h"
|
#include "viralloc.h"
|
||||||
#include "virlog.h"
|
#include "virlog.h"
|
||||||
#include "virerror.h"
|
#include "virerror.h"
|
||||||
@ -5094,8 +5095,7 @@ qemuDomainDiskChainElementRevoke(virQEMUDriverPtr driver,
|
|||||||
VIR_WARN("Failed to teardown cgroup for disk path %s",
|
VIR_WARN("Failed to teardown cgroup for disk path %s",
|
||||||
NULLSTR(elem->path));
|
NULLSTR(elem->path));
|
||||||
|
|
||||||
if (virSecurityManagerRestoreImageLabel(driver->securityManager,
|
if (qemuSecurityRestoreImageLabel(driver, vm, elem) < 0)
|
||||||
vm->def, elem) < 0)
|
|
||||||
VIR_WARN("Unable to restore security label on %s", NULLSTR(elem->path));
|
VIR_WARN("Unable to restore security label on %s", NULLSTR(elem->path));
|
||||||
|
|
||||||
if (qemuDomainNamespaceTeardownDisk(driver, vm, elem) < 0)
|
if (qemuDomainNamespaceTeardownDisk(driver, vm, elem) < 0)
|
||||||
@ -5135,8 +5135,7 @@ qemuDomainDiskChainElementPrepare(virQEMUDriverPtr driver,
|
|||||||
if (qemuSetupImageCgroup(vm, elem) < 0)
|
if (qemuSetupImageCgroup(vm, elem) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (virSecurityManagerSetImageLabel(driver->securityManager, vm->def,
|
if (qemuSecuritySetImageLabel(driver, vm, elem) < 0)
|
||||||
elem) < 0)
|
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
@ -133,6 +133,62 @@ qemuSecurityRestoreDiskLabel(virQEMUDriverPtr driver,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
qemuSecuritySetImageLabel(virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr vm,
|
||||||
|
virStorageSourcePtr src)
|
||||||
|
{
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) &&
|
||||||
|
virSecurityManagerTransactionStart(driver->securityManager) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (virSecurityManagerSetImageLabel(driver->securityManager,
|
||||||
|
vm->def,
|
||||||
|
src) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) &&
|
||||||
|
virSecurityManagerTransactionCommit(driver->securityManager,
|
||||||
|
vm->pid) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
cleanup:
|
||||||
|
virSecurityManagerTransactionAbort(driver->securityManager);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
qemuSecurityRestoreImageLabel(virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr vm,
|
||||||
|
virStorageSourcePtr src)
|
||||||
|
{
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) &&
|
||||||
|
virSecurityManagerTransactionStart(driver->securityManager) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (virSecurityManagerRestoreImageLabel(driver->securityManager,
|
||||||
|
vm->def,
|
||||||
|
src) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT) &&
|
||||||
|
virSecurityManagerTransactionCommit(driver->securityManager,
|
||||||
|
vm->pid) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
cleanup:
|
||||||
|
virSecurityManagerTransactionAbort(driver->securityManager);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
qemuSecuritySetHostdevLabel(virQEMUDriverPtr driver,
|
qemuSecuritySetHostdevLabel(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm,
|
||||||
|
@ -45,6 +45,14 @@ int qemuSecurityRestoreDiskLabel(virQEMUDriverPtr driver,
|
|||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm,
|
||||||
virDomainDiskDefPtr disk);
|
virDomainDiskDefPtr disk);
|
||||||
|
|
||||||
|
int qemuSecuritySetImageLabel(virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr vm,
|
||||||
|
virStorageSourcePtr src);
|
||||||
|
|
||||||
|
int qemuSecurityRestoreImageLabel(virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr vm,
|
||||||
|
virStorageSourcePtr src);
|
||||||
|
|
||||||
int qemuSecuritySetHostdevLabel(virQEMUDriverPtr driver,
|
int qemuSecuritySetHostdevLabel(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm,
|
||||||
virDomainHostdevDefPtr hostdev);
|
virDomainHostdevDefPtr hostdev);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user