qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] vnc: tight: Fix crash after 2GB of output
@ 2011-03-04  0:57 Roland Dreier
  2011-03-04  7:34 ` Michael Tokarev
  2011-03-04  7:36 ` Michael Tokarev
  0 siblings, 2 replies; 12+ messages in thread
From: Roland Dreier @ 2011-03-04  0:57 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: Roland Dreier, qemu-devel

From: Roland Dreier <roland@purestorage.com>

If one leaves a VNC session with tight compression running for long
enough, Qemu crashes.  This is because of the computation

    bytes = zstream->total_out - previous_out;

in tight_compress_data, where zstream->total_out is a uLong but
previous_out is an int.  As soon as zstream->total_out gets past
INT_MAX (ie 2GB), previous_out becomes negative and therefore the
result of the subtraction, bytes, becomes a huge positive number that
causes havoc for obvious reasons when passed as a length to
vnc_write().

The fix for this is simple: keep previous_out as a uLong too, which
avoids any problems with sign conversion or truncation.

Signed-off-by: Roland Dreier <roland@purestorage.com>
---
 ui/vnc-enc-tight.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/ui/vnc-enc-tight.c b/ui/vnc-enc-tight.c
index af45edd..59ec0e3 100644
--- a/ui/vnc-enc-tight.c
+++ b/ui/vnc-enc-tight.c
@@ -829,7 +829,7 @@ static int tight_compress_data(VncState *vs, int stream_id, size_t bytes,
                                int level, int strategy)
 {
     z_streamp zstream = &vs->tight.stream[stream_id];
-    int previous_out;
+    uLong previous_out;
 
     if (bytes < VNC_TIGHT_MIN_TO_COMPRESS) {
         vnc_write(vs, vs->tight.tight.buffer, vs->tight.tight.offset);

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2011-03-05  9:29 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-04  0:57 [Qemu-devel] [PATCH] vnc: tight: Fix crash after 2GB of output Roland Dreier
2011-03-04  7:34 ` Michael Tokarev
2011-03-04  8:56   ` Corentin Chary
2011-03-04 11:46     ` Michael Tokarev
2011-03-04 21:08       ` Corentin Chary
2011-03-05  5:56         ` [Qemu-devel] [PATCH][STABLE-0.14] " Michael Tokarev
2011-03-05  8:33           ` [Qemu-devel] " Corentin Chary
2011-03-05  8:57             ` Michael Tokarev
2011-03-05  9:29               ` Corentin Chary
2011-03-04 16:59   ` [Qemu-devel] [PATCH] " Roland Dreier
2011-03-04 18:46     ` Roland Dreier
2011-03-04  7:36 ` Michael Tokarev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).