9119d9
From bac831a6f6cba82adec7419dfdd1124a241a3c3e Mon Sep 17 00:00:00 2001
9119d9
Message-Id: <bac831a6f6cba82adec7419dfdd1124a241a3c3e@dist-git>
9119d9
From: Cole Robinson <crobinso@redhat.com>
9119d9
Date: Thu, 25 Sep 2014 11:21:46 -0400
9119d9
Subject: [PATCH] security: Fix labelling host devices
9119d9
9119d9
https://bugzilla.redhat.com/show_bug.cgi?id=1146550
9119d9
9119d9
The check for ISCSI devices was missing a check of subsys type, which
9119d9
meant we could skip labelling of other host devices as well. This fixes
9119d9
USB hotplug.
9119d9
9119d9
(cherry picked from commit d3489548b52083d7b4ff757e727a7a9471e1fe4f)
9119d9
Signed-off-by: John Ferlan <jferlan@redhat.com>
9119d9
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
9119d9
---
9119d9
 src/security/security_apparmor.c | 3 ++-
9119d9
 src/security/security_dac.c      | 6 ++++--
9119d9
 src/security/security_selinux.c  | 6 ++++--
9119d9
 3 files changed, 10 insertions(+), 5 deletions(-)
9119d9
9119d9
diff --git a/src/security/security_apparmor.c b/src/security/security_apparmor.c
9119d9
index 041ce65..3025284 100644
9119d9
--- a/src/security/security_apparmor.c
9119d9
+++ b/src/security/security_apparmor.c
9119d9
@@ -828,7 +828,8 @@ AppArmorSetSecurityHostdevLabel(virSecurityManagerPtr mgr,
9119d9
     /* Like AppArmorRestoreSecurityImageLabel() for a networked disk,
9119d9
      * do nothing for an iSCSI hostdev
9119d9
      */
9119d9
-    if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
9119d9
+    if (dev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI &&
9119d9
+        scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
9119d9
         return 0;
9119d9
 
9119d9
     if (profile_loaded(secdef->imagelabel) < 0)
9119d9
diff --git a/src/security/security_dac.c b/src/security/security_dac.c
9119d9
index e398d2c..85253af 100644
9119d9
--- a/src/security/security_dac.c
9119d9
+++ b/src/security/security_dac.c
9119d9
@@ -523,7 +523,8 @@ virSecurityDACSetSecurityHostdevLabel(virSecurityManagerPtr mgr,
9119d9
     /* Like virSecurityDACSetSecurityImageLabel() for a networked disk,
9119d9
      * do nothing for an iSCSI hostdev
9119d9
      */
9119d9
-    if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
9119d9
+    if (dev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI &&
9119d9
+        scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
9119d9
         return 0;
9119d9
 
9119d9
     cbdata.manager = mgr;
9119d9
@@ -657,7 +658,8 @@ virSecurityDACRestoreSecurityHostdevLabel(virSecurityManagerPtr mgr,
9119d9
     /* Like virSecurityDACRestoreSecurityImageLabelInt() for a networked disk,
9119d9
      * do nothing for an iSCSI hostdev
9119d9
      */
9119d9
-    if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
9119d9
+    if (dev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI &&
9119d9
+        scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
9119d9
         return 0;
9119d9
 
9119d9
     switch ((virDomainHostdevSubsysType) dev->source.subsys.type) {
9119d9
diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c
9119d9
index 1c9150b..85ad073 100644
9119d9
--- a/src/security/security_selinux.c
9119d9
+++ b/src/security/security_selinux.c
9119d9
@@ -1327,7 +1327,8 @@ virSecuritySELinuxSetSecurityHostdevSubsysLabel(virDomainDefPtr def,
9119d9
     /* Like virSecuritySELinuxSetSecurityImageLabelInternal() for a networked
9119d9
      * disk, do nothing for an iSCSI hostdev
9119d9
      */
9119d9
-    if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
9119d9
+    if (dev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI &&
9119d9
+        scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
9119d9
         return 0;
9119d9
 
9119d9
     switch (dev->source.subsys.type) {
9119d9
@@ -1520,7 +1521,8 @@ virSecuritySELinuxRestoreSecurityHostdevSubsysLabel(virSecurityManagerPtr mgr,
9119d9
     /* Like virSecuritySELinuxRestoreSecurityImageLabelInt() for a networked
9119d9
      * disk, do nothing for an iSCSI hostdev
9119d9
      */
9119d9
-    if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
9119d9
+    if (dev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI &&
9119d9
+        scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
9119d9
         return 0;
9119d9
 
9119d9
     switch (dev->source.subsys.type) {
9119d9
-- 
9119d9
2.1.1
9119d9