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

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