This is a fix for the object label generation. It uses a new flag for
virSecuritySELinuxGenNewContext that specifies whether the context is
for an object. If so the context role remains unchanged.
Without this fix it is not possible to start domains with image file or
block device backed storage when selinux is enabled.
Signed-off-by: Viktor Mihajlovski <mihajlov(a)linux.vnet.ibm.com>
---
src/security/security_selinux.c | 17 +++++++++++------
1 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c
index 48fd78b..cf69040 100644
--- a/src/security/security_selinux.c
+++ b/src/security/security_selinux.c
@@ -141,7 +141,9 @@ cleanup:
static char *
-virSecuritySELinuxGenNewContext(const char *basecontext, const char *mcs)
+virSecuritySELinuxGenNewContext(const char *basecontext,
+ const char *mcs,
+ bool isObjectContext)
{
context_t context = NULL;
char *ret = NULL;
@@ -176,10 +178,11 @@ virSecuritySELinuxGenNewContext(const char *basecontext, const char
*mcs)
goto cleanup;
}
- if (context_role_set(context,
+ if (!isObjectContext &&
+ context_role_set(context,
context_role_get(ourContext)) != 0) {
virReportSystemError(errno,
- _("Unable to set SELinux context user
'%s'"),
+ _("Unable to set SELinux context role
'%s'"),
context_role_get(ourContext));
goto cleanup;
}
@@ -421,7 +424,8 @@ virSecuritySELinuxGenSecurityLabel(virSecurityManagerPtr mgr,
if (!(def->seclabel.label =
virSecuritySELinuxGenNewContext(def->seclabel.baselabel ?
def->seclabel.baselabel :
- data->domain_context, mcs)))
+ data->domain_context,
+ mcs, false)))
goto cleanup;
break;
@@ -438,7 +442,7 @@ virSecuritySELinuxGenSecurityLabel(virSecurityManagerPtr mgr,
if (!def->seclabel.norelabel) {
if (!(def->seclabel.imagelabel =
- virSecuritySELinuxGenNewContext(data->file_context, mcs)))
+ virSecuritySELinuxGenNewContext(data->file_context, mcs, true)))
goto cleanup;
}
@@ -1639,7 +1643,8 @@ virSecuritySELinuxGenImageLabel(virSecurityManagerPtr mgr,
virReportOOMError();
goto cleanup;
}
- if (!(label = virSecuritySELinuxGenNewContext(data->file_context, mcs)))
+ if (!(label = virSecuritySELinuxGenNewContext(data->file_context,
+ mcs, true)))
goto cleanup;
}
}
--
1.7.0.4
Show replies by date
On 08/20/2012 08:12 AM, Viktor Mihajlovski wrote:
This is a fix for the object label generation. It uses a new flag
for
virSecuritySELinuxGenNewContext that specifies whether the context is
for an object. If so the context role remains unchanged.
Without this fix it is not possible to start domains with image file or
block device backed storage when selinux is enabled.
Signed-off-by: Viktor Mihajlovski <mihajlov(a)linux.vnet.ibm.com>
---
src/security/security_selinux.c | 17 +++++++++++------
1 files changed, 11 insertions(+), 6 deletions(-)
Differs from v1 only in whitespace, and v1 had acks, so I pushed this.
--
Eric Blake eblake(a)redhat.com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org