Control: tags -1 + patch

Hi,

Attached is the debdiff prepared for a jessie-security upload.

Regards,
Salvatore
diff -Nru spice-0.12.5/debian/changelog spice-0.12.5/debian/changelog
--- spice-0.12.5/debian/changelog       2014-05-23 17:56:48.000000000 +0200
+++ spice-0.12.5/debian/changelog       2015-09-04 09:35:09.000000000 +0200
@@ -1,3 +1,12 @@
+spice (0.12.5-1+deb8u1) jessie-security; urgency=high
+
+  * Non-maintainer upload by the Security Team.
+  * Add CVE-2015-3247.patch patch.
+    CVE-2015-3247: memory corruption in worker_update_monitors_config().
+    (Closes: #797976)
+
+ -- Salvatore Bonaccorso <car...@debian.org>  Fri, 04 Sep 2015 09:34:00 +0200
+
 spice (0.12.5-1) unstable; urgency=medium
 
   * new upstream release.  Can now build without celt!
diff -Nru spice-0.12.5/debian/patches/CVE-2015-3247.patch 
spice-0.12.5/debian/patches/CVE-2015-3247.patch
--- spice-0.12.5/debian/patches/CVE-2015-3247.patch     1970-01-01 
01:00:00.000000000 +0100
+++ spice-0.12.5/debian/patches/CVE-2015-3247.patch     2015-09-04 
09:35:09.000000000 +0200
@@ -0,0 +1,115 @@
+From 524eef10c6c6c2f3f30be28c56b8f96adc7901f0 Mon Sep 17 00:00:00 2001
+From: Frediano Ziglio <fzig...@redhat.com>
+Date: Tue, 9 Jun 2015 08:50:46 +0100
+Subject: [PATCH] Avoid race conditions reading monitor configs from guest
+
+For security reasons do not assume guest do not change structures it
+pass to Qemu.
+Guest could change count field while Qemu is copying QXLMonitorsConfig
+structure leading to heap corruption.
+This patch avoid it reading count only once.
+
+Signed-off-by: Frediano Ziglio <fzig...@redhat.com>
+---
+ server/red_worker.c | 46 ++++++++++++++++++++++++++++++++--------------
+ 1 file changed, 32 insertions(+), 14 deletions(-)
+
+--- a/server/red_worker.c
++++ b/server/red_worker.c
+@@ -11051,7 +11051,8 @@ static inline void red_monitors_config_i
+ }
+ 
+ static void worker_update_monitors_config(RedWorker *worker,
+-                                          QXLMonitorsConfig 
*dev_monitors_config)
++                                          QXLMonitorsConfig 
*dev_monitors_config,
++                                          uint16_t count, uint16_t 
max_allowed)
+ {
+     int heads_size;
+     MonitorsConfig *monitors_config;
+@@ -11060,22 +11061,22 @@ static void worker_update_monitors_confi
+     monitors_config_decref(worker->monitors_config);
+ 
+     spice_debug("monitors config %d(%d)",
+-                dev_monitors_config->count,
+-                dev_monitors_config->max_allowed);
+-    for (i = 0; i < dev_monitors_config->count; i++) {
++                count,
++                max_allowed);
++    for (i = 0; i < count; i++) {
+         spice_debug("+%d+%d %dx%d",
+                     dev_monitors_config->heads[i].x,
+                     dev_monitors_config->heads[i].y,
+                     dev_monitors_config->heads[i].width,
+                     dev_monitors_config->heads[i].height);
+     }
+-    heads_size = dev_monitors_config->count * sizeof(QXLHead);
++    heads_size = count * sizeof(QXLHead);
+     worker->monitors_config = monitors_config =
+         spice_malloc(sizeof(*monitors_config) + heads_size);
+     monitors_config->refs = 1;
+     monitors_config->worker = worker;
+-    monitors_config->count = dev_monitors_config->count;
+-    monitors_config->max_allowed = dev_monitors_config->max_allowed;
++    monitors_config->count = count;
++    monitors_config->max_allowed = max_allowed;
+     memcpy(monitors_config->heads, dev_monitors_config->heads, heads_size);
+ }
+ 
+@@ -11459,33 +11460,50 @@ void handle_dev_display_migrate(void *op
+     red_migrate_display(worker, rcc);
+ }
+ 
++static inline uint32_t qxl_monitors_config_size(uint32_t heads)
++{
++    return sizeof(QXLMonitorsConfig) + sizeof(QXLHead) * heads;
++}
++
+ static void handle_dev_monitors_config_async(void *opaque, void *payload)
+ {
+     RedWorkerMessageMonitorsConfigAsync *msg = payload;
+     RedWorker *worker = opaque;
+-    int min_size = sizeof(QXLMonitorsConfig) + sizeof(QXLHead);
+     int error;
++    uint16_t count, max_allowed;
+     QXLMonitorsConfig *dev_monitors_config =
+         (QXLMonitorsConfig*)get_virt(&worker->mem_slots, msg->monitors_config,
+-                                     min_size, msg->group_id, &error);
++                                     qxl_monitors_config_size(1),
++                                     msg->group_id, &error);
+ 
+     if (error) {
+         /* TODO: raise guest bug (requires added QXL interface) */
+         return;
+     }
+     worker->driver_cap_monitors_config = 1;
+-    if (dev_monitors_config->count == 0) {
++    count = dev_monitors_config->count;
++    max_allowed = dev_monitors_config->max_allowed;
++    if (count == 0) {
+         spice_warning("ignoring an empty monitors config message from 
driver");
+         return;
+     }
+-    if (dev_monitors_config->count > dev_monitors_config->max_allowed) {
++    if (count > max_allowed) {
+         spice_warning("ignoring malformed monitors_config from driver, "
+                       "count > max_allowed %d > %d",
+-                      dev_monitors_config->count,
+-                      dev_monitors_config->max_allowed);
++                      count,
++                      max_allowed);
++        return;
++    }
++    /* get pointer again to check virtual size */
++    dev_monitors_config =
++        (QXLMonitorsConfig*)get_virt(&worker->mem_slots, msg->monitors_config,
++                                     qxl_monitors_config_size(count),
++                                     msg->group_id, &error);
++    if (error) {
++        /* TODO: raise guest bug (requires added QXL interface) */
+         return;
+     }
+-    worker_update_monitors_config(worker, dev_monitors_config);
++    worker_update_monitors_config(worker, dev_monitors_config, count, 
max_allowed);
+     red_worker_push_monitors_config(worker);
+ }
+ 
diff -Nru spice-0.12.5/debian/patches/series spice-0.12.5/debian/patches/series
--- spice-0.12.5/debian/patches/series  2014-05-23 16:46:36.000000000 +0200
+++ spice-0.12.5/debian/patches/series  2015-09-04 09:35:09.000000000 +0200
@@ -1 +1,2 @@
 fix-tests-warnings.patch
+CVE-2015-3247.patch

Reply via email to