summaryrefslogtreecommitdiffstats
path: root/recipes-support/gnutls/gnutls/CVE-2017-7868.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-support/gnutls/gnutls/CVE-2017-7868.patch')
-rw-r--r--recipes-support/gnutls/gnutls/CVE-2017-7868.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/recipes-support/gnutls/gnutls/CVE-2017-7868.patch b/recipes-support/gnutls/gnutls/CVE-2017-7868.patch
new file mode 100644
index 0000000..dca7861
--- /dev/null
+++ b/recipes-support/gnutls/gnutls/CVE-2017-7868.patch
@@ -0,0 +1,59 @@
1From 51464af713d71802e3c6d5ac15f1a95132a354fe Mon Sep 17 00:00:00 2001
2From: Nikos Mavrogiannopoulos <nmav@redhat.com>
3Date: Mon, 20 Feb 2017 11:13:08 +0100
4Subject: [PATCH] cdk_pkt_read: enforce packet limits
5
6That ensures that there are no overflows in the subsequent
7calculations.
8
9Resolves the oss-fuzz found bug:
10https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=420
11
12Relates: #159
13
14CVE: CVE-2017-7869
15Upstream-Status: Backport
16
17Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
18Signed-off-by: Sona Sarmadi <sona.sarmadi@enea.com>
19---
20 lib/opencdk/read-packet.c | 9 +++++++++
21 1 file changed, 9 insertions(+)
22
23diff --git a/lib/opencdk/read-packet.c b/lib/opencdk/read-packet.c
24index 8055a63..ead6480 100644
25--- a/lib/opencdk/read-packet.c
26+++ b/lib/opencdk/read-packet.c
27@@ -950,6 +950,7 @@ static cdk_error_t skip_packet(cdk_stream_t inp, size_t pktlen)
28 return 0;
29 }
30
31+#define MAX_PACKET_LEN (1<<24)
32
33 /**
34 * cdk_pkt_read:
35@@ -1002,6 +1003,13 @@ cdk_error_t cdk_pkt_read(cdk_stream_t inp, cdk_packet_t pkt)
36 else
37 read_old_length(inp, ctb, &pktlen, &pktsize);
38
39+ /* enforce limits to ensure that the following calculations
40+ * do not overflow */
41+ if (pktlen >= MAX_PACKET_LEN || pktsize >= MAX_PACKET_LEN) {
42+ _cdk_log_info("cdk_pkt_read: too long packet\n");
43+ return gnutls_assert_val(CDK_Inv_Packet);
44+ }
45+
46 pkt->pkttype = pkttype;
47 pkt->pktlen = pktlen;
48 pkt->pktsize = pktsize + pktlen;
49@@ -1026,6 +1034,7 @@ cdk_error_t cdk_pkt_read(cdk_stream_t inp, cdk_packet_t pkt)
50 break;
51
52 case CDK_PKT_USER_ID:
53+
54 pkt->pkt.user_id = cdk_calloc(1, sizeof *pkt->pkt.user_id
55 + pkt->pktlen + 1);
56 if (!pkt->pkt.user_id)
57--
58libgit2 0.26.0
59