Blame SOURCES/kvm-io-monitor-encoutput-buffer-size-from-websocket-GSou.patch

4a2fec
From c3a99fb2c831c2f3da069359a9a8a0c734923669 Mon Sep 17 00:00:00 2001
4a2fec
From: "Daniel P. Berrange" <berrange@redhat.com>
4a2fec
Date: Wed, 20 Dec 2017 17:56:54 +0100
4a2fec
Subject: [PATCH 14/42] io: monitor encoutput buffer size from websocket
4a2fec
 GSource
4a2fec
4a2fec
RH-Author: Daniel P. Berrange <berrange@redhat.com>
4a2fec
Message-id: <20171220175702.29663-13-berrange@redhat.com>
4a2fec
Patchwork-id: 78466
4a2fec
O-Subject: [RHV-7.5 qemu-kvm-rhev PATCH v2 12/20] io: monitor encoutput buffer size from websocket GSource
4a2fec
Bugzilla: 1518650
4a2fec
RH-Acked-by: John Snow <jsnow@redhat.com>
4a2fec
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
4a2fec
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
4a2fec
4a2fec
The websocket GSource is monitoring the size of the rawoutput
4a2fec
buffer to determine if the channel can accepts more writes.
4a2fec
The rawoutput buffer, however, is merely a temporary staging
4a2fec
buffer before data is copied into the encoutput buffer. Thus
4a2fec
its size will always be zero when the GSource runs.
4a2fec
4a2fec
This flaw causes the encoutput buffer to grow without bound
4a2fec
if the other end of the underlying data channel doesn't
4a2fec
read data being sent. This can be seen with VNC if a client
4a2fec
is on a slow WAN link and the guest OS is sending many screen
4a2fec
updates. A malicious VNC client can act like it is on a slow
4a2fec
link by playing a video in the guest and then reading data
4a2fec
very slowly, causing QEMU host memory to expand arbitrarily.
4a2fec
4a2fec
This issue is assigned CVE-2017-15268, publically reported in
4a2fec
4a2fec
  https://bugs.launchpad.net/qemu/+bug/1718964
4a2fec
4a2fec
Reviewed-by: Eric Blake <eblake@redhat.com>
4a2fec
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
4a2fec
(cherry picked from commit a7b20a8efa28e5f22c26c06cd06c2f12bc863493)
4a2fec
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
4a2fec
---
4a2fec
 io/channel-websock.c | 4 ++--
4a2fec
 1 file changed, 2 insertions(+), 2 deletions(-)
4a2fec
4a2fec
diff --git a/io/channel-websock.c b/io/channel-websock.c
4a2fec
index d1d471f..04bcc05 100644
4a2fec
--- a/io/channel-websock.c
4a2fec
+++ b/io/channel-websock.c
4a2fec
@@ -28,7 +28,7 @@
4a2fec
 #include <time.h>
4a2fec
 
4a2fec
 
4a2fec
-/* Max amount to allow in rawinput/rawoutput buffers */
4a2fec
+/* Max amount to allow in rawinput/encoutput buffers */
4a2fec
 #define QIO_CHANNEL_WEBSOCK_MAX_BUFFER 8192
4a2fec
 
4a2fec
 #define QIO_CHANNEL_WEBSOCK_CLIENT_KEY_LEN 24
4a2fec
@@ -1208,7 +1208,7 @@ qio_channel_websock_source_check(GSource *source)
4a2fec
     if (wsource->wioc->rawinput.offset || wsource->wioc->io_eof) {
4a2fec
         cond |= G_IO_IN;
4a2fec
     }
4a2fec
-    if (wsource->wioc->rawoutput.offset < QIO_CHANNEL_WEBSOCK_MAX_BUFFER) {
4a2fec
+    if (wsource->wioc->encoutput.offset < QIO_CHANNEL_WEBSOCK_MAX_BUFFER) {
4a2fec
         cond |= G_IO_OUT;
4a2fec
     }
4a2fec
 
4a2fec
-- 
4a2fec
1.8.3.1
4a2fec