summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta-multimedia/recipes-multimedia/sox/sox/CVE-2017-15372.patch100
-rw-r--r--meta-multimedia/recipes-multimedia/sox/sox_14.4.2.bb1
2 files changed, 101 insertions, 0 deletions
diff --git a/meta-multimedia/recipes-multimedia/sox/sox/CVE-2017-15372.patch b/meta-multimedia/recipes-multimedia/sox/sox/CVE-2017-15372.patch
new file mode 100644
index 0000000000..168fded39f
--- /dev/null
+++ b/meta-multimedia/recipes-multimedia/sox/sox/CVE-2017-15372.patch
@@ -0,0 +1,100 @@
1From 13086aa971f5a0a5a644323456a90a9fa96e03c3 Mon Sep 17 00:00:00 2001
2From: Mans Rullgard <mans@mansr.com>
3Date: Wed, 8 Nov 2017 00:27:46 +0000
4Subject: [PATCH] adpcm: fix stack overflow with >4 channels (CVE-2017-15372)
5
6CVE: CVE-2017-15372
7Upstream-Status: Backport [https://github.com/mansr/sox/commit/001c337552912d286ba68086ac378f6fdc1e8b50]
8Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
9---
10 src/adpcm.c | 8 +++++++-
11 src/adpcm.h | 3 +++
12 src/wav.c | 5 ++++-
13 3 files changed, 14 insertions(+), 2 deletions(-)
14
15diff --git a/src/adpcm.c b/src/adpcm.c
16index 2e13867..f64b7d5 100644
17--- a/src/adpcm.c
18+++ b/src/adpcm.c
19@@ -71,6 +71,11 @@ const short lsx_ms_adpcm_i_coef[7][2] = {
20 { 392,-232}
21 };
22
23+extern void *lsx_ms_adpcm_alloc(unsigned chans)
24+{
25+ return lsx_malloc(chans * sizeof(MsState_t));
26+}
27+
28 static inline sox_sample_t AdpcmDecode(sox_sample_t c, MsState_t *state,
29 sox_sample_t sample1, sox_sample_t sample2)
30 {
31@@ -102,6 +107,7 @@ static inline sox_sample_t AdpcmDecode(sox_sample_t c, MsState_t *state,
32
33 /* lsx_ms_adpcm_block_expand_i() outputs interleaved samples into one output buffer */
34 const char *lsx_ms_adpcm_block_expand_i(
35+ void *priv,
36 unsigned chans, /* total channels */
37 int nCoef,
38 const short *coef,
39@@ -113,7 +119,7 @@ const char *lsx_ms_adpcm_block_expand_i(
40 const unsigned char *ip;
41 unsigned ch;
42 const char *errmsg = NULL;
43- MsState_t state[4]; /* One decompressor state for each channel */
44+ MsState_t *state = priv; /* One decompressor state for each channel */
45
46 /* Read the four-byte header for each channel */
47 ip = ibuff;
48diff --git a/src/adpcm.h b/src/adpcm.h
49index af4d6f0..db5cc61 100644
50--- a/src/adpcm.h
51+++ b/src/adpcm.h
52@@ -29,8 +29,11 @@
53 /* default coef sets */
54 extern const short lsx_ms_adpcm_i_coef[7][2];
55
56+extern void *lsx_ms_adpcm_alloc(unsigned chans);
57+
58 /* lsx_ms_adpcm_block_expand_i() outputs interleaved samples into one output buffer */
59 extern const char *lsx_ms_adpcm_block_expand_i(
60+ void *priv,
61 unsigned chans, /* total channels */
62 int nCoef,
63 const short *coef,
64diff --git a/src/wav.c b/src/wav.c
65index fad334c..066be6d 100644
66--- a/src/wav.c
67+++ b/src/wav.c
68@@ -82,6 +82,7 @@ typedef struct {
69 /* following used by *ADPCM wav files */
70 unsigned short nCoefs; /* ADPCM: number of coef sets */
71 short *lsx_ms_adpcm_i_coefs; /* ADPCM: coef sets */
72+ void *ms_adpcm_data; /* Private data of adpcm decoder */
73 unsigned char *packet; /* Temporary buffer for packets */
74 short *samples; /* interleaved samples buffer */
75 short *samplePtr; /* Pointer to current sample */
76@@ -175,7 +176,7 @@ static unsigned short AdpcmReadBlock(sox_format_t * ft)
77 }
78 }
79
80- errmsg = lsx_ms_adpcm_block_expand_i(ft->signal.channels, wav->nCoefs, wav->lsx_ms_adpcm_i_coefs, wav->packet, wav->samples, samplesThisBlock);
81+ errmsg = lsx_ms_adpcm_block_expand_i(wav->ms_adpcm_data, ft->signal.channels, wav->nCoefs, wav->lsx_ms_adpcm_i_coefs, wav->packet, wav->samples, samplesThisBlock);
82
83 if (errmsg)
84 lsx_warn("%s", errmsg);
85@@ -791,6 +792,7 @@ static int startread(sox_format_t * ft)
86
87 /* nCoefs, lsx_ms_adpcm_i_coefs used by adpcm.c */
88 wav->lsx_ms_adpcm_i_coefs = lsx_malloc(wav->nCoefs * 2 * sizeof(short));
89+ wav->ms_adpcm_data = lsx_ms_adpcm_alloc(wChannels);
90 {
91 int i, errct=0;
92 for (i=0; len>=2 && i < 2*wav->nCoefs; i++) {
93@@ -1216,6 +1218,7 @@ static int stopread(sox_format_t * ft)
94 free(wav->packet);
95 free(wav->samples);
96 free(wav->lsx_ms_adpcm_i_coefs);
97+ free(wav->ms_adpcm_data);
98 free(wav->comment);
99 wav->comment = NULL;
100
diff --git a/meta-multimedia/recipes-multimedia/sox/sox_14.4.2.bb b/meta-multimedia/recipes-multimedia/sox/sox_14.4.2.bb
index 4c5452427e..96d0543520 100644
--- a/meta-multimedia/recipes-multimedia/sox/sox_14.4.2.bb
+++ b/meta-multimedia/recipes-multimedia/sox/sox_14.4.2.bb
@@ -35,6 +35,7 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/sox/sox-${PV}.tar.gz \
35 file://CVE-2017-11359.patch \ 35 file://CVE-2017-11359.patch \
36 file://CVE-2017-15370.patch \ 36 file://CVE-2017-15370.patch \
37 file://CVE-2017-15371.patch \ 37 file://CVE-2017-15371.patch \
38 file://CVE-2017-15372.patch \
38 " 39 "
39SRC_URI[md5sum] = "d04fba2d9245e661f245de0577f48a33" 40SRC_URI[md5sum] = "d04fba2d9245e661f245de0577f48a33"
40SRC_URI[sha256sum] = "b45f598643ffbd8e363ff24d61166ccec4836fea6d3888881b8df53e3bb55f6c" 41SRC_URI[sha256sum] = "b45f598643ffbd8e363ff24d61166ccec4836fea6d3888881b8df53e3bb55f6c"