diff options
author | Michal Schmidt <mschmidt@redhat.com> | 2014-11-06 16:48:11 +0100 |
---|---|---|
committer | Mike Gilbert <floppym@gentoo.org> | 2014-11-23 13:23:14 -0500 |
commit | 1903fdfbf63f499b170c6fb6bd9ba4cf4aea866c (patch) | |
tree | 4ea0fb2ddd4b014ae6ab086bd871504cc7e7b4ef | |
parent | systemctl: when invokes as "reboot -f", sync() (diff) | |
download | systemd-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.c | 8 |
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); |