Zbigniew Jędrzejewski-Szmek f9f301
From dd5e5ef3392a83525d23aa9a523e9d187fb7faaf Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek f9f301
From: Michal Schmidt <mschmidt@redhat.com>
Zbigniew Jędrzejewski-Szmek f9f301
Date: Thu, 6 Nov 2014 16:48:11 +0100
Zbigniew Jędrzejewski-Szmek f9f301
Subject: [PATCH] shared: create files even if the SELinux policy has no
Zbigniew Jędrzejewski-Szmek f9f301
 context for them
Zbigniew Jędrzejewski-Szmek f9f301
Zbigniew Jędrzejewski-Szmek f9f301
The SELinux policy defines no context for some files. E.g.:
Zbigniew Jędrzejewski-Szmek f9f301
  $ matchpathcon /run/lock/subsys /dev/mqueue
Zbigniew Jędrzejewski-Szmek f9f301
  /run/lock/subsys        <<none>>
Zbigniew Jędrzejewski-Szmek f9f301
  /dev/mqueue     <<none>>
Zbigniew Jędrzejewski-Szmek f9f301
Zbigniew Jędrzejewski-Szmek f9f301
We still need to be able to create them.
Zbigniew Jędrzejewski-Szmek f9f301
In this case selabel_lookup_raw() returns ENOENT. We should then skip
Zbigniew Jędrzejewski-Szmek f9f301
setfscreatecon(), but still return success.
Zbigniew Jędrzejewski-Szmek f9f301
It was broken since c34255bdb2 ("label: unify code to make directories,
Zbigniew Jędrzejewski-Szmek f9f301
symlinks").
Zbigniew Jędrzejewski-Szmek f9f301
Zbigniew Jędrzejewski-Szmek f9f301
(cherry picked from commit 2d58aa4692e9fc47911bff5d064ba3e328c35369)
Zbigniew Jędrzejewski-Szmek f9f301
---
Zbigniew Jędrzejewski-Szmek f9f301
 src/shared/selinux-util.c | 8 ++++++--
Zbigniew Jędrzejewski-Szmek f9f301
 1 file changed, 6 insertions(+), 2 deletions(-)
Zbigniew Jędrzejewski-Szmek f9f301
Zbigniew Jędrzejewski-Szmek f9f301
diff --git a/src/shared/selinux-util.c b/src/shared/selinux-util.c
Zbigniew Jędrzejewski-Szmek f9f301
index 1eddd17d27..6bd3bf1c80 100644
Zbigniew Jędrzejewski-Szmek f9f301
--- a/src/shared/selinux-util.c
Zbigniew Jędrzejewski-Szmek f9f301
+++ b/src/shared/selinux-util.c
Zbigniew Jędrzejewski-Szmek f9f301
@@ -332,9 +332,13 @@ int mac_selinux_create_file_prepare(const char *path, mode_t mode) {
Zbigniew Jędrzejewski-Szmek f9f301
                 r = selabel_lookup_raw(label_hnd, &filecon, newpath, mode);
Zbigniew Jędrzejewski-Szmek f9f301
         }
Zbigniew Jędrzejewski-Szmek f9f301
 
Zbigniew Jędrzejewski-Szmek f9f301
-        if (r < 0 && errno != ENOENT)
Zbigniew Jędrzejewski-Szmek f9f301
+        /* No context specified by the policy? Proceed without setting it. */
Zbigniew Jędrzejewski-Szmek f9f301
+        if (r < 0 && errno == ENOENT)
Zbigniew Jędrzejewski-Szmek f9f301
+                return 0;
Zbigniew Jędrzejewski-Szmek f9f301
+
Zbigniew Jędrzejewski-Szmek f9f301
+        if (r < 0)
Zbigniew Jędrzejewski-Szmek f9f301
                 r = -errno;
Zbigniew Jędrzejewski-Szmek f9f301
-        else if (r == 0) {
Zbigniew Jędrzejewski-Szmek f9f301
+        else {
Zbigniew Jędrzejewski-Szmek f9f301
                 r = setfscreatecon(filecon);
Zbigniew Jędrzejewski-Szmek f9f301
                 if (r < 0) {
Zbigniew Jędrzejewski-Szmek f9f301
                         log_enforcing("Failed to set SELinux security context %s for %s: %m", filecon, path);