qemuDomainObjPrivatePtr priv = vm->privateData;
pid_t pid = -1;
+ /* Explicitly run this outside of transaction. We really want to relabel
+ * the file in the host and not in the domain's namespace. */
+ if (virSecurityManagerDomainSetPathLabelRO(driver->securityManager,
+ vm->def,
+ stdin_path) < 0)
+ goto cleanup;
+
if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT))
pid = vm->pid;
static int
virSecuritySELinuxSetAllLabel(virSecurityManagerPtr mgr,
virDomainDefPtr def,
- const char *stdin_path,
+ const char *stdin_path G_GNUC_UNUSED,
bool chardevStdioLogd,
bool migrated G_GNUC_UNUSED)
{
data->content_context, true) < 0)
return -1;
- if (stdin_path &&
- virSecuritySELinuxSetFilecon(mgr, stdin_path,
- data->content_context, true) < 0)
- return -1;
-
return 0;
}
return virSecuritySELinuxSetFilecon(mgr, path, seclabel->imagelabel, true);
}
+static int
+virSecuritySELinuxDomainSetPathLabelRO(virSecurityManagerPtr mgr,
+ virDomainDefPtr def,
+ const char *path)
+{
+ virSecuritySELinuxDataPtr data = virSecurityManagerGetPrivateData(mgr);
+ virSecurityLabelDefPtr secdef;
+
+ secdef = virDomainDefGetSecurityLabelDef(def, SECURITY_SELINUX_NAME);
+
+ if (!path || !secdef || !secdef->relabel || data->skipAllLabel)
+ return 0;
+
+ return virSecuritySELinuxSetFilecon(mgr, path, data->content_context, false);
+}
/*
* virSecuritySELinuxSetFileLabels:
.getBaseLabel = virSecuritySELinuxGetBaseLabel,
.domainSetPathLabel = virSecuritySELinuxDomainSetPathLabel,
+ .domainSetPathLabelRO = virSecuritySELinuxDomainSetPathLabelRO,
.domainSetSecurityChardevLabel = virSecuritySELinuxSetChardevLabel,
.domainRestoreSecurityChardevLabel = virSecuritySELinuxRestoreChardevLabel,