Blame SOURCES/0003-quic-Check-RLE-lengths.patch

d84b9c
From d45a4954d73b41a255b8b4ec57c01ae87ec2936e Mon Sep 17 00:00:00 2001
d84b9c
From: Frediano Ziglio <freddy77@gmail.com>
d84b9c
Date: Wed, 29 Apr 2020 15:11:38 +0100
d84b9c
Subject: [PATCH spice-common 3/4] quic: Check RLE lengths
d84b9c
d84b9c
Avoid buffer overflows decoding images. On compression we compute
d84b9c
lengths till end of line so it won't cause regressions.
d84b9c
Proved by fuzzing the code.
d84b9c
d84b9c
Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
d84b9c
Acked-by: Uri Lublin <uril@redhat.com>
d84b9c
---
d84b9c
 common/quic_tmpl.c | 6 +++++-
d84b9c
 1 file changed, 5 insertions(+), 1 deletion(-)
d84b9c
d84b9c
diff --git a/subprojects/spice-common/common/quic_tmpl.c b/subprojects/spice-common/common/quic_tmpl.c
d84b9c
index f0a4927..11e09f5 100644
d84b9c
--- a/subprojects/spice-common/common/quic_tmpl.c
d84b9c
+++ b/subprojects/spice-common/common/quic_tmpl.c
d84b9c
@@ -570,7 +570,11 @@ static void FNAME_DECL(uncompress_row_seg)(const PIXEL * const prev_row,
d84b9c
 do_run:
d84b9c
         state->waitcnt = stopidx - i;
d84b9c
         run_index = i;
d84b9c
-        run_end = i + decode_state_run(encoder, state);
d84b9c
+        run_end = decode_state_run(encoder, state);
d84b9c
+        if (run_end < 0 || run_end > (end - i)) {
d84b9c
+            encoder->usr->error(encoder->usr, "wrong RLE\n");
d84b9c
+        }
d84b9c
+        run_end += i;
d84b9c
 
d84b9c
         for (; i < run_end; i++) {
d84b9c
             UNCOMPRESS_PIX_START(&cur_row[i]);
d84b9c
-- 
d84b9c
2.25.4
d84b9c