aboutsummaryrefslogtreecommitdiffstats
path: root/main/spice
diff options
context:
space:
mode:
authorTBK <tbk@jjtc.dk>2017-10-26 16:15:09 +0200
committerLeonardo Arena <rnalrd@alpinelinux.org>2017-10-27 13:45:55 +0000
commit516192d8e6a233a6fba38bb4ec3f530ec33e7929 (patch)
tree79fd5da969cd8c37adb5e8f21c187383984e9fee /main/spice
parent381765531d0c4fe58373a4ce255af1cc90153f65 (diff)
downloadaports-516192d8e6a233a6fba38bb4ec3f530ec33e7929.tar.bz2
aports-516192d8e6a233a6fba38bb4ec3f530ec33e7929.tar.xz
main/spice: upgrade to 0.14.0
Diffstat (limited to 'main/spice')
-rw-r--r--main/spice/APKBUILD20
-rw-r--r--main/spice/CVE-2016-9577.patch28
-rw-r--r--main/spice/CVE-2016-9578-1.patch55
-rw-r--r--main/spice/CVE-2016-9578-2.patch38
-rw-r--r--main/spice/CVE-2017-7506.patch151
-rw-r--r--main/spice/libressl.patch15
6 files changed, 22 insertions, 285 deletions
diff --git a/main/spice/APKBUILD b/main/spice/APKBUILD
index 0cafecbf69..6a0a570f78 100644
--- a/main/spice/APKBUILD
+++ b/main/spice/APKBUILD
@@ -1,24 +1,21 @@
# Contributor: Natanael Copa <ncopa@alpinelinux.org>
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=spice
-pkgver=0.12.8
+pkgver=0.14.0
pkgrel=4
pkgdesc="Implements the SPICE protocol"
url="http://www.spice-space.org/"
arch="all"
license="LGPLv2+"
depends=""
-depends_dev="spice-protocol pixman-dev celt051-dev libressl-dev libxinerama-dev"
+depends_dev="spice-protocol pixman-dev celt051-dev libxinerama-dev"
makedepends="$depends_dev alsa-lib-dev libjpeg-turbo-dev libxrandr-dev
cyrus-sasl-dev libxfixes-dev python2-dev bash cegui06-dev py-parsing
- py-six glib-dev opus-dev"
+ py-six glib-dev opus-dev libressl-dev"
subpackages="$pkgname-dev $pkgname-server"
source="http://www.spice-space.org/download/releases/$pkgname-$pkgver.tar.bz2
- CVE-2016-9577.patch
- CVE-2016-9578-1.patch
- CVE-2016-9578-2.patch
- CVE-2017-7506.patch
- "
+ libressl.patch
+ "
builddir="$srcdir/$pkgname-$pkgver"
# secfixes:
@@ -62,8 +59,5 @@ server() {
mv "$pkgdir"/usr/lib/*server.so.* "$subpkgdir"/usr/lib/
}
-sha512sums="6485d3522af1cde93d2c0abad7f7ef9f2e4d3e5049314fb93b6dd4b86e33d67d353a3ff42a355c8fd991bad447bbde1e6320c083bbc6f02b576bd9cebe7269ed spice-0.12.8.tar.bz2
-51c38766c9582376c95e63515d0c009f8c3e95cc03a1751c01974cab9295159eb74d35a08157e1eaa44e99a7bb5b2fdad83d9a8c7e38850741d9b5d534133bc7 CVE-2016-9577.patch
-ffae544784bd98da10cd86db3f5c5753c4833aee6b16e4e671160e92103d84a3dbc4da9f132f35e3b3b71a515e09b68b689c49e5f4265363b9eef39c42d70719 CVE-2016-9578-1.patch
-62ba3844fa11c65eba7d013c209962e39af051885bdf55943410f9122d99135ce30495263f34580ce959355eb60a6026125b181f6b10f0bfab19bbd4ff54f92b CVE-2016-9578-2.patch
-8a7387fd297aa3d59e38af650f3f12d9b89e46283e2ceaf53ca6e01db6db3c2ac0df164fde05decc4a0d8a05296d3f31195e86e383029804e91b23c84e1292a2 CVE-2017-7506.patch"
+sha512sums="84532146aa628ca6ca459a82afb89d6391892e063668fd4a68023c92cee7ca868b6c82e31dd9886819b76ea745ebdae0d0030e1f608d8f58f51c00f0b09bae1f spice-0.14.0.tar.bz2
+f28b0afaec4a9d18be0d29979c43f40695d33dcb158129064aa2033489534f643ec380075e16de9d54fd4b266dbcebea55d028dd4ec6ace49c0b155d96e8f68a libressl.patch"
diff --git a/main/spice/CVE-2016-9577.patch b/main/spice/CVE-2016-9577.patch
deleted file mode 100644
index 0d0a9ae4b1..0000000000
--- a/main/spice/CVE-2016-9577.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 5f96b596353d73bdf4bb3cd2de61e48a7fd5b4c3 Mon Sep 17 00:00:00 2001
-From: Frediano Ziglio <fziglio@redhat.com>
-Date: Tue, 29 Nov 2016 16:46:56 +0000
-Subject: [PATCH] main-channel: Prevent overflow reading messages from client
-
-Caller is supposed the function return a buffer able to store
-size bytes.
-
-Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
-Acked-by: Christophe Fergeau <cfergeau@redhat.com>
----
- server/main_channel.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/server/main_channel.c b/server/main_channel.c
-index 0ecc9df8..1fc39155 100644
---- a/server/main_channel.c
-+++ b/server/main_channel.c
-@@ -1026,6 +1026,9 @@ static uint8_t *main_channel_alloc_msg_rcv_buf(RedChannelClient *rcc,
-
- if (type == SPICE_MSGC_MAIN_AGENT_DATA) {
- return reds_get_agent_data_buffer(mcc, size);
-+ } else if (size > sizeof(main_chan->recv_buf)) {
-+ /* message too large, caller will log a message and close the connection */
-+ return NULL;
- } else {
- return main_chan->recv_buf;
- }
diff --git a/main/spice/CVE-2016-9578-1.patch b/main/spice/CVE-2016-9578-1.patch
deleted file mode 100644
index bc289a4243..0000000000
--- a/main/spice/CVE-2016-9578-1.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From 1c6517973095a67c8cb57f3550fc1298404ab556 Mon Sep 17 00:00:00 2001
-From: Frediano Ziglio <fziglio@redhat.com>
-Date: Tue, 13 Dec 2016 14:39:48 +0000
-Subject: [PATCH] Prevent possible DoS attempts during protocol handshake
-
-The limit for link message is specified using a 32 bit unsigned integer.
-This could cause possible DoS due to excessive memory allocations and
-some possible crashes.
-For instance a value >= 2^31 causes a spice_assert to be triggered in
-async_read_handler (reds-stream.c) due to an integer overflow at this
-line:
-
- int n = async->end - async->now;
-
-This could be easily triggered with a program like
-
- #!/usr/bin/env python
-
- import socket
- import time
- from struct import pack
-
- server = '127.0.0.1'
- port = 5900
-
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- s.connect((server, port))
- data = pack('<4sIII', 'REDQ', 2, 2, 0xaaaaaaaa)
- s.send(data)
-
- time.sleep(1)
-
-without requiring any authentication (the same can be done
-with TLS).
-
-Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
-Acked-by: Christophe Fergeau <cfergeau@redhat.com>
----
- server/reds.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/server/reds.c b/server/reds.c
-index f40b65c1..86a33d53 100644
---- a/server/reds.c
-+++ b/server/reds.c
-@@ -2202,7 +2202,8 @@ static void reds_handle_read_header_done(void *opaque)
-
- reds->peer_minor_version = header->minor_version;
-
-- if (header->size < sizeof(SpiceLinkMess)) {
-+ /* the check for 4096 is to avoid clients to cause arbitrary big memory allocations */
-+ if (header->size < sizeof(SpiceLinkMess) || header->size > 4096) {
- reds_send_link_error(link, SPICE_LINK_ERR_INVALID_DATA);
- spice_warning("bad size %u", header->size);
- reds_link_free(link);
diff --git a/main/spice/CVE-2016-9578-2.patch b/main/spice/CVE-2016-9578-2.patch
deleted file mode 100644
index 78fb1eb811..0000000000
--- a/main/spice/CVE-2016-9578-2.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From f66dc643635518e53dfbe5262f814a64eec54e4a Mon Sep 17 00:00:00 2001
-From: Frediano Ziglio <fziglio@redhat.com>
-Date: Tue, 13 Dec 2016 14:40:10 +0000
-Subject: [PATCH] Prevent integer overflows in capability checks
-
-The limits for capabilities are specified using 32 bit unsigned integers.
-This could cause possible integer overflows causing buffer overflows.
-For instance the sum of num_common_caps and num_caps can be 0 avoiding
-additional checks.
-As the link message is now capped to 4096 and the capabilities are
-contained in the link message limit the capabilities to 1024
-(capabilities are expressed in number of uint32_t items).
-
-Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
-Acked-by: Christophe Fergeau <cfergeau@redhat.com>
----
- server/reds.c | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/server/reds.c b/server/reds.c
-index 86a33d53..91504544 100644
---- a/server/reds.c
-+++ b/server/reds.c
-@@ -2110,6 +2110,14 @@ static void reds_handle_read_link_done(void *opaque)
- link_mess->num_channel_caps = GUINT32_FROM_LE(link_mess->num_channel_caps);
- link_mess->num_common_caps = GUINT32_FROM_LE(link_mess->num_common_caps);
-
-+ /* Prevent DoS. Currently we defined only 13 capabilities,
-+ * I expect 1024 to be valid for quite a lot time */
-+ if (link_mess->num_channel_caps > 1024 || link_mess->num_common_caps > 1024) {
-+ reds_send_link_error(link, SPICE_LINK_ERR_INVALID_DATA);
-+ reds_link_free(link);
-+ return;
-+ }
-+
- num_caps = link_mess->num_common_caps + link_mess->num_channel_caps;
- caps = (uint32_t *)((uint8_t *)link_mess + link_mess->caps_offset);
-
diff --git a/main/spice/CVE-2017-7506.patch b/main/spice/CVE-2017-7506.patch
deleted file mode 100644
index dcdeea6e7d..0000000000
--- a/main/spice/CVE-2017-7506.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-From 257f69d619fed407493156c8a7b952abc8a51314 Mon Sep 17 00:00:00 2001
-From: Frediano Ziglio <fziglio@...hat.com>
-Date: Mon, 15 May 2017 15:57:28 +0100
-Subject: [spice-server 1/3] reds: Disconnect when receiving overly big
- ClientMonitorsConfig
-
-Total message size received from the client was unlimited. There is
-a 2kiB size check on individual agent messages, but the MonitorsConfig
-message can be split in multiple chunks, and the size of the
-non-chunked MonitorsConfig message was never checked. This could easily
-lead to memory exhaustion on the host.
-
-Signed-off-by: Frediano Ziglio <fziglio@...hat.com>
----
- server/reds.c | 25 +++++++++++++++++++++++--
- 1 file changed, 23 insertions(+), 2 deletions(-)
-
-diff --git a/server/reds.c b/server/reds.c
-index f439a3668..7be85fdfc 100644
---- a/server/reds.c
-+++ b/server/reds.c
-@@ -993,19 +993,34 @@ static void reds_client_monitors_config_cleanup(void)
- static void reds_on_main_agent_monitors_config(
- MainChannelClient *mcc, void *message, size_t size)
- {
-+ const unsigned int MAX_MONITORS = 256;
-+ const unsigned int MAX_MONITOR_CONFIG_SIZE =
-+ sizeof(VDAgentMonitorsConfig) + MAX_MONITORS * sizeof(VDAgentMonConfig);
-+
- VDAgentMessage *msg_header;
- VDAgentMonitorsConfig *monitors_config;
- RedsClientMonitorsConfig *cmc = &reds->client_monitors_config;
-
-+ // limit size of message sent by the client as this can cause a DoS through
-+ // memory exhaustion, or potentially some integer overflows
-+ if (sizeof(VDAgentMessage) + MAX_MONITOR_CONFIG_SIZE - cmc->buffer_size < size) {
-+ goto overflow;
-+ }
- cmc->buffer_size += size;
- cmc->buffer = realloc(cmc->buffer, cmc->buffer_size);
- spice_assert(cmc->buffer);
- cmc->mcc = mcc;
- memcpy(cmc->buffer + cmc->buffer_pos, message, size);
- cmc->buffer_pos += size;
-+ if (sizeof(VDAgentMessage) > cmc->buffer_size) {
-+ spice_debug("not enough data yet. %d", cmc->buffer_size);
-+ return;
-+ }
- msg_header = (VDAgentMessage *)cmc->buffer;
-- if (sizeof(VDAgentMessage) > cmc->buffer_size ||
-- msg_header->size > cmc->buffer_size - sizeof(VDAgentMessage)) {
-+ if (msg_header->size > MAX_MONITOR_CONFIG_SIZE) {
-+ goto overflow;
-+ }
-+ if (msg_header->size > cmc->buffer_size - sizeof(VDAgentMessage)) {
- spice_debug("not enough data yet. %d", cmc->buffer_size);
- return;
- }
-@@ -1013,6 +1028,12 @@ static void reds_on_main_agent_monitors_config(
- spice_debug("%s: %d", __func__, monitors_config->num_of_monitors);
- red_dispatcher_client_monitors_config(monitors_config);
- reds_client_monitors_config_cleanup();
-+ return;
-+
-+overflow:
-+ spice_warning("received invalid MonitorsConfig request from client, disconnecting");
-+ red_channel_client_disconnect(main_channel_client_get_base(mcc));
-+ reds_client_monitors_config_cleanup();
- }
-
- void reds_on_main_agent_data(MainChannelClient *mcc, void *message, size_t size)
---
-2.13.0
-
-From ff2b4ef70181087d5abd50bad76d026ec5088a93 Mon Sep 17 00:00:00 2001
-From: Frediano Ziglio <fziglio@...hat.com>
-Date: Mon, 15 May 2017 15:57:28 +0100
-Subject: [spice-server 2/3] reds: Avoid integer overflows handling monitor
- configuration
-
-Avoid VDAgentMessage::size integer overflows.
-
-Signed-off-by: Frediano Ziglio <fziglio@...hat.com>
----
- server/reds.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/server/reds.c b/server/reds.c
-index 7be85fdfc..e1c8c1086 100644
---- a/server/reds.c
-+++ b/server/reds.c
-@@ -1024,6 +1024,9 @@ static void reds_on_main_agent_monitors_config(
- spice_debug("not enough data yet. %d", cmc->buffer_size);
- return;
- }
-+ if (msg_header->size < sizeof(VDAgentMonitorsConfig)) {
-+ goto overflow;
-+ }
- monitors_config = (VDAgentMonitorsConfig *)(cmc->buffer + sizeof(*msg_header));
- spice_debug("%s: %d", __func__, monitors_config->num_of_monitors);
- red_dispatcher_client_monitors_config(monitors_config);
---
-2.13.0
-
-From 8cc3d7df2792751939cc832f4110c57e2addfca5 Mon Sep 17 00:00:00 2001
-From: Frediano Ziglio <fziglio@...hat.com>
-Date: Mon, 15 May 2017 15:57:28 +0100
-Subject: [spice-server 3/3] reds: Avoid buffer overflows handling monitor
- configuration
-
-It was also possible for a malicious client to set
-VDAgentMonitorsConfig::num_of_monitors to a number larger
-than the actual size of VDAgentMOnitorsConfig::monitors.
-This would lead to buffer overflows, which could allow the guest to
-read part of the host memory. This might cause write overflows in the
-host as well, but controlling the content of such buffers seems
-complicated.
-
-Signed-off-by: Frediano Ziglio <fziglio@...hat.com>
----
- server/reds.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/server/reds.c b/server/reds.c
-index e1c8c1086..3a42c3755 100644
---- a/server/reds.c
-+++ b/server/reds.c
-@@ -1000,6 +1000,7 @@ static void reds_on_main_agent_monitors_config(
- VDAgentMessage *msg_header;
- VDAgentMonitorsConfig *monitors_config;
- RedsClientMonitorsConfig *cmc = &reds->client_monitors_config;
-+ uint32_t max_monitors;
-
- // limit size of message sent by the client as this can cause a DoS through
- // memory exhaustion, or potentially some integer overflows
-@@ -1028,6 +1029,12 @@ static void reds_on_main_agent_monitors_config(
- goto overflow;
- }
- monitors_config = (VDAgentMonitorsConfig *)(cmc->buffer + sizeof(*msg_header));
-+ // limit the monitor number to avoid buffer overflows
-+ max_monitors = (msg_header->size - sizeof(VDAgentMonitorsConfig)) /
-+ sizeof(VDAgentMonConfig);
-+ if (monitors_config->num_of_monitors > max_monitors) {
-+ goto overflow;
-+ }
- spice_debug("%s: %d", __func__, monitors_config->num_of_monitors);
- red_dispatcher_client_monitors_config(monitors_config);
- reds_client_monitors_config_cleanup();
---
-2.13.0
-
diff --git a/main/spice/libressl.patch b/main/spice/libressl.patch
new file mode 100644
index 0000000000..c66ef50bd5
--- /dev/null
+++ b/main/spice/libressl.patch
@@ -0,0 +1,15 @@
+--- a/spice-common/common/ssl_verify.c
++++ b/spice-common/common/ssl_verify.c
+@@ -33,12 +33,10 @@
+ #include <string.h>
+ #include <gio/gio.h>
+
+-#if OPENSSL_VERSION_NUMBER < 0x10100000
+ static const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *asn1)
+ {
+ return M_ASN1_STRING_data(asn1);
+ }
+-#endif
+
+ static int verify_pubkey(X509* cert, const char *key, size_t key_size)
+ {