summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--recipes-extended/libvirt/libvirt/CVE-2021-3631.patch56
-rw-r--r--recipes-extended/libvirt/libvirt_6.1.0.bb1
2 files changed, 57 insertions, 0 deletions
diff --git a/recipes-extended/libvirt/libvirt/CVE-2021-3631.patch b/recipes-extended/libvirt/libvirt/CVE-2021-3631.patch
new file mode 100644
index 00000000..c1fa8c2f
--- /dev/null
+++ b/recipes-extended/libvirt/libvirt/CVE-2021-3631.patch
@@ -0,0 +1,56 @@
1From 15073504dbb624d3f6c911e85557019d3620fdb2 Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
3Date: Mon, 28 Jun 2021 13:09:04 +0100
4Subject: [PATCH] security: fix SELinux label generation logic
5MIME-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
8
9A process can access a file if the set of MCS categories
10for the file is equal-to *or* a subset-of, the set of
11MCS categories for the process.
12
13If there are two VMs:
14
15 a) svirt_t:s0:c117
16 b) svirt_t:s0:c117,c720
17
18Then VM (b) is able to access files labelled for VM (a).
19
20IOW, we must discard case where the categories are equal
21because that is a subset of many other valid category pairs.
22
23Fixes: https://gitlab.com/libvirt/libvirt/-/issues/153
24CVE-2021-3631
25Reviewed-by: Peter Krempa <pkrempa@redhat.com>
26Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
27
28Upstream-Status: Backport
29CVE: CVE-2021-3631
30Signed-off-by: Armin Kuster <akuster@mvista.com>
31
32---
33 src/security/security_selinux.c | 10 +++++++++-
34 1 file changed, 9 insertions(+), 1 deletion(-)
35
36Index: libvirt-6.1.0/src/security/security_selinux.c
37===================================================================
38--- libvirt-6.1.0.orig/src/security/security_selinux.c
39+++ libvirt-6.1.0/src/security/security_selinux.c
40@@ -391,7 +391,15 @@ virSecuritySELinuxMCSFind(virSecurityMan
41 VIR_DEBUG("Try cat %s:c%d,c%d", sens, c1 + catMin, c2 + catMin);
42
43 if (c1 == c2) {
44- mcs = g_strdup_printf("%s:c%d", sens, catMin + c1);
45+ /*
46+ * A process can access a file if the set of MCS categories
47+ * for the file is equal-to *or* a subset-of, the set of
48+ * MCS categories for the process.
49+ *
50+ * IOW, we must discard case where the categories are equal
51+ * because that is a subset of other category pairs.
52+ */
53+ continue;
54 } else {
55 if (c1 > c2) {
56 int t = c1;
diff --git a/recipes-extended/libvirt/libvirt_6.1.0.bb b/recipes-extended/libvirt/libvirt_6.1.0.bb
index aa7563f6..d4978b38 100644
--- a/recipes-extended/libvirt/libvirt_6.1.0.bb
+++ b/recipes-extended/libvirt/libvirt_6.1.0.bb
@@ -45,6 +45,7 @@ SRC_URI = "http://libvirt.org/sources/libvirt-${PV}.tar.xz;name=libvirt \
45 file://CVE-2020-25637_2.patch \ 45 file://CVE-2020-25637_2.patch \
46 file://CVE-2020-25637_3.patch \ 46 file://CVE-2020-25637_3.patch \
47 file://CVE-2020-25637_4.patch \ 47 file://CVE-2020-25637_4.patch \
48 file://CVE-2021-3631.patch \
48 " 49 "
49 50
50SRC_URI[libvirt.md5sum] = "a870e63f20fac2ccf98e716d05256145" 51SRC_URI[libvirt.md5sum] = "a870e63f20fac2ccf98e716d05256145"