Browse code

libvirt : Fix CVE-2018-1064

Change-Id: I06a508c332ba09fb95d40c222fce30f0b7702d31
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/5048
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: Sharath George

Xiaolin Li authored on 2018/04/21 03:32:17
Showing 2 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,59 @@
0
+From fbf31e1a4cd19d6f6e33e0937a009775cd7d9513 Mon Sep 17 00:00:00 2001
1
+From: =?utf8?q?Daniel=20P.=20Berrang=C3=A9?= <berrange@redhat.com>
2
+Date: Thu, 1 Mar 2018 14:55:26 +0000
3
+Subject: [PATCH] qemu: avoid denial of service reading from QEMU guest agent (CVE-2018-1064)
4
+MIME-Version: 1.0
5
+Content-Type: text/plain; charset=utf8
6
+Content-Transfer-Encoding: 8bit
7
+
8
+We read from the agent until seeing a \r\n pair to indicate a completed
9
+reply or event. To avoid memory denial-of-service though, we must have a
10
+size limit on amount of data we buffer. 10 MB is large enough that it
11
+ought to cope with normal agent replies, and small enough that we're not
12
+consuming unreasonable mem.
13
+
14
+This is identical to the flaw we had reading from the QEMU monitor
15
+as CVE-2018-5748, so rather embarrassing that we forgot to fix
16
+the agent code at the same time.
17
+
18
+Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
19
+---
20
+ src/qemu/qemu_agent.c |   15 +++++++++++++++
21
+ 1 files changed, 15 insertions(+), 0 deletions(-)
22
+
23
+diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
24
+index 0f36054..89183c3 100644
25
+--- a/src/qemu/qemu_agent.c
26
+@@ -53,6 +53,15 @@ VIR_LOG_INIT("qemu.qemu_agent");
27
+ #define DEBUG_IO 0
28
+ #define DEBUG_RAW_IO 0
29
+ 
30
++/* We read from QEMU until seeing a \r\n pair to indicate a
31
++ * completed reply or event. To avoid memory denial-of-service
32
++ * though, we must have a size limit on amount of data we
33
++ * buffer. 10 MB is large enough that it ought to cope with
34
++ * normal QEMU replies, and small enough that we're not
35
++ * consuming unreasonable mem.
36
++ */
37
++#define QEMU_AGENT_MAX_RESPONSE (10 * 1024 * 1024)
38
++
39
+ /* When you are the first to uncomment this,
40
+  * don't forget to uncomment the corresponding
41
+  * part in qemuAgentIOProcessEvent as well.
42
+@@ -535,6 +544,12 @@ qemuAgentIORead(qemuAgentPtr mon)
43
+     int ret = 0;
44
+ 
45
+     if (avail < 1024) {
46
++        if (mon->bufferLength >= QEMU_AGENT_MAX_RESPONSE) {
47
++            virReportSystemError(ERANGE,
48
++                                 _("No complete agent response found in %d bytes"),
49
++                                 QEMU_AGENT_MAX_RESPONSE);
50
++            return -1;
51
++        }
52
+         if (VIR_REALLOC_N(mon->buffer,
53
+                           mon->bufferLength + 1024) < 0)
54
+             return -1;
55
+-- 
56
+1.7.1
57
+
... ...
@@ -1,12 +1,13 @@
1 1
 Summary:        Virtualization API library that supports KVM, QEMU, Xen, ESX etc
2 2
 Name:           libvirt
3 3
 Version:        3.2.0
4
-Release:        3%{?dist}
4
+Release:        4%{?dist}
5 5
 License:        LGPL
6 6
 URL:            http://libvirt.org/
7 7
 Source0:        http://libvirt.org/sources/%{name}-%{version}.tar.xz
8 8
 %define sha1    libvirt=47d4b443fdf1e268589529018c436bbc4b413a7c
9 9
 Patch0:         libvirt-CVE-2017-1000256.patch
10
+Patch1:         libvirt-CVE-2018-1064.patch
10 11
 Group:          Virtualization/Libraries
11 12
 Vendor:         VMware, Inc.
12 13
 Distribution:   Photon
... ...
@@ -58,6 +59,7 @@ This contains development tools and libraries for libvirt.
58 58
 %prep
59 59
 %setup -q
60 60
 %patch0 -p1
61
+%patch1 -p1
61 62
 
62 63
 %build
63 64
 ./configure \
... ...
@@ -108,6 +110,8 @@ find %{buildroot} -name '*.la' -delete
108 108
 %{_mandir}/*
109 109
 
110 110
 %changelog
111
+*   Fri Apr 20 2018 Xiaolin Li <xiaolinl@vmware.com> 3.2.0-4
112
+-   Fix CVE-2018-1064
111 113
 *   Thu Dec 07 2017 Xiaolin Li <xiaolinl@vmware.com> 3.2.0-3
112 114
 -   Add so files in folder connection-driver and lock-driver to main package.
113 115
 *   Mon Dec 04 2017 Xiaolin Li <xiaolinl@vmware.com> 3.2.0-2