]> xenbits.xensource.com Git - libvirt.git/commitdiff
security_selinux: Play nicely with network FS that only emulates SELinux
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 22 Aug 2019 14:34:02 +0000 (16:34 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Fri, 30 Aug 2019 10:50:09 +0000 (12:50 +0200)
There are some network file systems that do support XATTRs (e.g.
gluster via FUSE). And they appear to support SELinux too.
However, not really. Problem is, that it is impossible to change
SELinux label of a file stored there, and yet we claim success
(rightfully - hypervisor succeeds in opening the file). But this
creates a problem for us - from XATTR bookkeeping POV, we haven't
changed the label and thus if we remembered any label, we must
roll back and remove it.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1740506

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
src/security/security_selinux.c

index 1df04d735802c3348737c8d9d5c60273fb0ff67b..39d616ba441d82d228b7758aad546875ae5befee 100644 (file)
@@ -1384,12 +1384,18 @@ virSecuritySELinuxSetFilecon(virSecurityManagerPtr mgr,
         }
     }
 
-    if (virSecuritySELinuxSetFileconImpl(path, tcon, privileged) < 0)
+    rc = virSecuritySELinuxSetFileconImpl(path, tcon, privileged);
+    if (rc < 0)
         goto cleanup;
 
+    /* Do not try restoring the label if it was not changed
+     * (setting it failed in a non-critical fashion) */
+    if (rc == 0)
+        rollback = false;
+
     ret = 0;
  cleanup:
-    if (ret < 0 && rollback) {
+    if (rollback) {
         virErrorPtr origerr;
 
         virErrorPreserveLast(&origerr);