Blame SOURCES/libvirt-api-disallow-virDomainSaveImageGetXMLDesc-on-read-only-connections.patch

c313de
From 8533d820c378ae31176922703b7368f586a59bc0 Mon Sep 17 00:00:00 2001
c313de
Message-Id: <8533d820c378ae31176922703b7368f586a59bc0@dist-git>
c313de
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
c313de
Date: Tue, 18 Jun 2019 13:29:59 +0200
c313de
Subject: [PATCH] api: disallow virDomainSaveImageGetXMLDesc on read-only
c313de
 connections
c313de
MIME-Version: 1.0
c313de
Content-Type: text/plain; charset=UTF-8
c313de
Content-Transfer-Encoding: 8bit
c313de
c313de
The virDomainSaveImageGetXMLDesc API is taking a path parameter,
c313de
which can point to any path on the system. This file will then be
c313de
read and parsed by libvirtd running with root privileges.
c313de
c313de
Forbid it on read-only connections.
c313de
c313de
Fixes: CVE-2019-10161
c313de
Reported-by: Matthias Gerstner <mgerstner@suse.de>
c313de
Signed-off-by: Ján Tomko <jtomko@redhat.com>
c313de
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
c313de
Signed-off-by: Ján Tomko <jtomko@redhat.com>
c313de
c313de
Conflicts:
c313de
  src/libvirt-domain.c
c313de
  src/remote/remote_protocol.x
c313de
c313de
Upstream commit 12a51f372 which introduced the VIR_DOMAIN_SAVE_IMAGE_XML_SECURE
c313de
alias for VIR_DOMAIN_XML_SECURE is not backported.
c313de
Just skip the commit since we now disallow the whole API on read-only
c313de
connections, regardless of the flag.
c313de
Message-Id: <4c14d609cd7b548459b9ef2f59728fa5c5e38268.1560857354.git.jtomko@redhat.com>
c313de
c313de
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
c313de
---
c313de
 src/libvirt-domain.c         | 11 ++---------
c313de
 src/qemu/qemu_driver.c       |  2 +-
c313de
 src/remote/remote_protocol.x |  3 +--
c313de
 3 files changed, 4 insertions(+), 12 deletions(-)
c313de
c313de
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
c313de
index ad0ded9ee3..0ba85b9360 100644
c313de
--- a/src/libvirt-domain.c
c313de
+++ b/src/libvirt-domain.c
c313de
@@ -1073,9 +1073,7 @@ virDomainRestoreFlags(virConnectPtr conn, const char *from, const char *dxml,
c313de
  * previously by virDomainSave() or virDomainSaveFlags().
c313de
  *
c313de
  * No security-sensitive data will be included unless @flags contains
c313de
- * VIR_DOMAIN_XML_SECURE; this flag is rejected on read-only
c313de
- * connections.  For this API, @flags should not contain either
c313de
- * VIR_DOMAIN_XML_INACTIVE or VIR_DOMAIN_XML_UPDATE_CPU.
c313de
+ * VIR_DOMAIN_XML_SECURE.
c313de
  *
c313de
  * Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of
c313de
  * error.  The caller must free() the returned value.
c313de
@@ -1091,12 +1089,7 @@ virDomainSaveImageGetXMLDesc(virConnectPtr conn, const char *file,
c313de
 
c313de
     virCheckConnectReturn(conn, NULL);
c313de
     virCheckNonNullArgGoto(file, error);
c313de
-
c313de
-    if ((conn->flags & VIR_CONNECT_RO) && (flags & VIR_DOMAIN_XML_SECURE)) {
c313de
-        virReportError(VIR_ERR_OPERATION_DENIED, "%s",
c313de
-                       _("virDomainSaveImageGetXMLDesc with secure flag"));
c313de
-        goto error;
c313de
-    }
c313de
+    virCheckReadOnlyGoto(conn->flags, error);
c313de
 
c313de
     if (conn->driver->domainSaveImageGetXMLDesc) {
c313de
         char *ret;
c313de
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
c313de
index 88c08f88ee..2da87992fd 100644
c313de
--- a/src/qemu/qemu_driver.c
c313de
+++ b/src/qemu/qemu_driver.c
c313de
@@ -6786,7 +6786,7 @@ qemuDomainSaveImageGetXMLDesc(virConnectPtr conn, const char *path,
c313de
     if (fd < 0)
c313de
         goto cleanup;
c313de
 
c313de
-    if (virDomainSaveImageGetXMLDescEnsureACL(conn, def, flags) < 0)
c313de
+    if (virDomainSaveImageGetXMLDescEnsureACL(conn, def) < 0)
c313de
         goto cleanup;
c313de
 
c313de
     ret = qemuDomainDefFormatXML(driver, def, flags);
c313de
diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
c313de
index 28c8febabd..52b92334fa 100644
c313de
--- a/src/remote/remote_protocol.x
c313de
+++ b/src/remote/remote_protocol.x
c313de
@@ -5226,8 +5226,7 @@ enum remote_procedure {
c313de
     /**
c313de
      * @generate: both
c313de
      * @priority: high
c313de
-     * @acl: domain:read
c313de
-     * @acl: domain:read_secure:VIR_DOMAIN_XML_SECURE
c313de
+     * @acl: domain:write
c313de
      */
c313de
     REMOTE_PROC_DOMAIN_SAVE_IMAGE_GET_XML_DESC = 235,
c313de
 
c313de
-- 
c313de
2.22.0
c313de