aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Schmidt <mschmidt@redhat.com>2014-11-06 16:48:11 +0100
committerMike Gilbert <floppym@gentoo.org>2014-11-23 13:23:14 -0500
commit1903fdfbf63f499b170c6fb6bd9ba4cf4aea866c (patch)
tree4ea0fb2ddd4b014ae6ab086bd871504cc7e7b4ef
parentsystemctl: when invokes as "reboot -f", sync() (diff)
downloadsystemd-1903fdfbf63f499b170c6fb6bd9ba4cf4aea866c.tar.gz
systemd-1903fdfbf63f499b170c6fb6bd9ba4cf4aea866c.tar.bz2
systemd-1903fdfbf63f499b170c6fb6bd9ba4cf4aea866c.zip
shared: create files even if the SELinux policy has no context for them
The SELinux policy defines no context for some files. E.g.: $ matchpathcon /run/lock/subsys /dev/mqueue /run/lock/subsys <<none>> /dev/mqueue <<none>> We still need to be able to create them. In this case selabel_lookup_raw() returns ENOENT. We should then skip setfscreatecon(), but still return success. It was broken since c34255bdb2 ("label: unify code to make directories, symlinks").
-rw-r--r--src/shared/selinux-util.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/shared/selinux-util.c b/src/shared/selinux-util.c
index 1eddd17d2..6bd3bf1c8 100644
--- a/src/shared/selinux-util.c
+++ b/src/shared/selinux-util.c
@@ -332,9 +332,13 @@ int mac_selinux_create_file_prepare(const char *path, mode_t mode) {
r = selabel_lookup_raw(label_hnd, &filecon, newpath, mode);
}
- if (r < 0 && errno != ENOENT)
+ /* No context specified by the policy? Proceed without setting it. */
+ if (r < 0 && errno == ENOENT)
+ return 0;
+
+ if (r < 0)
r = -errno;
- else if (r == 0) {
+ else {
r = setfscreatecon(filecon);
if (r < 0) {
log_enforcing("Failed to set SELinux security context %s for %s: %m", filecon, path);