summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArchana Polampalli <archana.polampalli@windriver.com>2024-05-06 04:03:19 +0000
committerSteve Sakoman <steve@sakoman.com>2024-05-15 09:44:14 -0700
commitc0acd30703c362c331f78ff8f823ef8f66340c74 (patch)
treef9d40fc75c0ec5fd90397737a37b07f9537dd011
parentc4612ee6065d4fee6b9cd3a5cce5d68c03a874b0 (diff)
downloadpoky-c0acd30703c362c331f78ff8f823ef8f66340c74.tar.gz
gstreamer1.0-plugins-bad: fix CVE-2023-44446
(From OE-Core rev: ebe4a219117ba0c161fefe45c514234384291e23) Signed-off-by: Archana Polampalli <archana.polampalli@windriver.com> Signed-off-by: Steve Sakoman <steve@sakoman.com>
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/CVE-2023-44446.patch329
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.20.7.bb1
2 files changed, 330 insertions, 0 deletions
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/CVE-2023-44446.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/CVE-2023-44446.patch
new file mode 100644
index 0000000000..92fe82d36d
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/CVE-2023-44446.patch
@@ -0,0 +1,329 @@
1From 7dfaa57b6f9b55f17ffe824bd8988bb71ae11353 Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
3Date: Fri, 20 Oct 2023 00:09:57 +0300
4Subject: [PATCH] mxfdemux: Store GstMXFDemuxEssenceTrack in their own fixed
5 allocation
6
7Previously they were stored inline inside a GArray, but as references to
8the tracks were stored in various other places although the array could
9still be updated (and reallocated!), this could lead to dangling
10references in various places.
11
12Instead now store them in a GPtrArray in their own allocation so each
13track's memory position stays fixed.
14
15Fixes ZDI-CAN-22299
16
17Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3055
18
19Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5638>
20
21CVE: CVE-2023-44446
22
23Upstream-Status: Backport [https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/7dfaa57b6f9b55f1]
24
25Signed-off-by: Archana Polampalli <archana.polampalli@windriver.com>
26---
27 gst/mxf/mxfdemux.c | 117 ++++++++++++++++++++-------------------------
28 gst/mxf/mxfdemux.h | 2 +-
29 2 files changed, 52 insertions(+), 67 deletions(-)
30
31diff --git a/gst/mxf/mxfdemux.c b/gst/mxf/mxfdemux.c
32index b0ccc17..7eb990c 100644
33--- a/gst/mxf/mxfdemux.c
34+++ b/gst/mxf/mxfdemux.c
35@@ -170,10 +170,25 @@ gst_mxf_demux_partition_free (GstMXFDemuxPartition * partition)
36 }
37
38 static void
39-gst_mxf_demux_reset_mxf_state (GstMXFDemux * demux)
40+gst_mxf_demux_essence_track_free (GstMXFDemuxEssenceTrack * t)
41 {
42- guint i;
43+ if (t->offsets)
44+ g_array_free (t->offsets, TRUE);
45+
46+ g_free (t->mapping_data);
47+
48+ if (t->tags)
49+ gst_tag_list_unref (t->tags);
50+
51+ if (t->caps)
52+ gst_caps_unref (t->caps);
53+
54+ g_free (t);
55+}
56
57+static void
58+gst_mxf_demux_reset_mxf_state (GstMXFDemux * demux)
59+{
60 GST_DEBUG_OBJECT (demux, "Resetting MXF state");
61
62 g_list_foreach (demux->partitions, (GFunc) gst_mxf_demux_partition_free,
63@@ -183,22 +198,7 @@ gst_mxf_demux_reset_mxf_state (GstMXFDemux * demux)
64
65 demux->current_partition = NULL;
66
67- for (i = 0; i < demux->essence_tracks->len; i++) {
68- GstMXFDemuxEssenceTrack *t =
69- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i);
70-
71- if (t->offsets)
72- g_array_free (t->offsets, TRUE);
73-
74- g_free (t->mapping_data);
75-
76- if (t->tags)
77- gst_tag_list_unref (t->tags);
78-
79- if (t->caps)
80- gst_caps_unref (t->caps);
81- }
82- g_array_set_size (demux->essence_tracks, 0);
83+ g_ptr_array_set_size (demux->essence_tracks, 0);
84 }
85
86 static void
87@@ -216,7 +216,7 @@ gst_mxf_demux_reset_linked_metadata (GstMXFDemux * demux)
88
89 for (i = 0; i < demux->essence_tracks->len; i++) {
90 GstMXFDemuxEssenceTrack *track =
91- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i);
92+ g_ptr_array_index (demux->essence_tracks, i);
93
94 track->source_package = NULL;
95 track->delta_id = -1;
96@@ -419,7 +419,7 @@ gst_mxf_demux_partition_postcheck (GstMXFDemux * demux,
97
98 for (i = 0; i < demux->essence_tracks->len; i++) {
99 GstMXFDemuxEssenceTrack *cand =
100- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i);
101+ g_ptr_array_index (demux->essence_tracks, i);
102
103 if (cand->body_sid != partition->partition.body_sid)
104 continue;
105@@ -866,8 +866,7 @@ gst_mxf_demux_update_essence_tracks (GstMXFDemux * demux)
106
107 for (k = 0; k < demux->essence_tracks->len; k++) {
108 GstMXFDemuxEssenceTrack *tmp =
109- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack,
110- k);
111+ g_ptr_array_index (demux->essence_tracks, k);
112
113 if (tmp->track_number == track->parent.track_number &&
114 tmp->body_sid == edata->body_sid) {
115@@ -885,24 +884,24 @@ gst_mxf_demux_update_essence_tracks (GstMXFDemux * demux)
116 }
117
118 if (!etrack) {
119- GstMXFDemuxEssenceTrack tmp;
120+ GstMXFDemuxEssenceTrack *tmp = g_new0 (GstMXFDemuxEssenceTrack, 1);
121+
122+ tmp->body_sid = edata->body_sid;
123+ tmp->index_sid = edata->index_sid;
124+ tmp->track_number = track->parent.track_number;
125+ tmp->track_id = track->parent.track_id;
126+ memcpy (&tmp->source_package_uid, &package->parent.package_uid, 32);
127
128- memset (&tmp, 0, sizeof (tmp));
129- tmp.body_sid = edata->body_sid;
130- tmp.index_sid = edata->index_sid;
131- tmp.track_number = track->parent.track_number;
132- tmp.track_id = track->parent.track_id;
133- memcpy (&tmp.source_package_uid, &package->parent.package_uid, 32);
134
135 if (demux->current_partition->partition.body_sid == edata->body_sid &&
136 demux->current_partition->partition.body_offset == 0)
137- tmp.position = 0;
138+ tmp->position = 0;
139 else
140- tmp.position = -1;
141+ tmp->position = -1;
142
143- g_array_append_val (demux->essence_tracks, tmp);
144+ g_ptr_array_add (demux->essence_tracks, tmp);
145 etrack =
146- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack,
147+ g_ptr_array_index (demux->essence_tracks,
148 demux->essence_tracks->len - 1);
149 new = TRUE;
150 }
151@@ -1050,13 +1049,7 @@ gst_mxf_demux_update_essence_tracks (GstMXFDemux * demux)
152
153 next:
154 if (new) {
155- g_free (etrack->mapping_data);
156- if (etrack->tags)
157- gst_tag_list_unref (etrack->tags);
158- if (etrack->caps)
159- gst_caps_unref (etrack->caps);
160-
161- g_array_remove_index (demux->essence_tracks,
162+ g_ptr_array_remove_index (demux->essence_tracks,
163 demux->essence_tracks->len - 1);
164 }
165 }
166@@ -1069,7 +1062,8 @@ gst_mxf_demux_update_essence_tracks (GstMXFDemux * demux)
167
168 for (i = 0; i < demux->essence_tracks->len; i++) {
169 GstMXFDemuxEssenceTrack *etrack =
170- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i);
171+ g_ptr_array_index (demux->essence_tracks, i);
172+
173
174 if (!etrack->source_package || !etrack->source_track || !etrack->caps) {
175 GST_ERROR_OBJECT (demux, "Failed to update essence track %u", i);
176@@ -1438,7 +1432,7 @@ gst_mxf_demux_update_tracks (GstMXFDemux * demux)
177
178 for (k = 0; k < demux->essence_tracks->len; k++) {
179 GstMXFDemuxEssenceTrack *tmp =
180- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, k);
181+ g_ptr_array_index (demux->essence_tracks, k);
182
183 if (tmp->source_package == source_package &&
184 tmp->source_track == source_track) {
185@@ -1927,8 +1921,7 @@ gst_mxf_demux_pad_set_component (GstMXFDemux * demux, GstMXFDemuxPad * pad,
186 pad->current_essence_track = NULL;
187
188 for (k = 0; k < demux->essence_tracks->len; k++) {
189- GstMXFDemuxEssenceTrack *tmp =
190- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, k);
191+ GstMXFDemuxEssenceTrack *tmp = g_ptr_array_index (demux->essence_tracks, k);
192
193 if (tmp->source_package == source_package &&
194 tmp->source_track == source_track) {
195@@ -2712,7 +2705,7 @@ gst_mxf_demux_handle_generic_container_essence_element (GstMXFDemux * demux,
196 if (!etrack) {
197 for (i = 0; i < demux->essence_tracks->len; i++) {
198 GstMXFDemuxEssenceTrack *tmp =
199- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i);
200+ g_ptr_array_index (demux->essence_tracks, i);
201
202 if (tmp->body_sid == demux->current_partition->partition.body_sid &&
203 (tmp->track_number == track_number || tmp->track_number == 0)) {
204@@ -3933,8 +3926,7 @@ from_track_offset:
205 gst_mxf_demux_set_partition_for_offset (demux, demux->offset);
206
207 for (i = 0; i < demux->essence_tracks->len; i++) {
208- GstMXFDemuxEssenceTrack *t =
209- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i);
210+ GstMXFDemuxEssenceTrack *t = g_ptr_array_index (demux->essence_tracks, i);
211
212 if (index_start_position != -1 && t == etrack)
213 t->position = index_start_position;
214@@ -3958,8 +3950,7 @@ from_track_offset:
215 /* Handle EOS */
216 for (i = 0; i < demux->essence_tracks->len; i++) {
217 GstMXFDemuxEssenceTrack *t =
218- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack,
219- i);
220+ g_ptr_array_index (demux->essence_tracks, i);
221
222 if (t->position > 0)
223 t->duration = t->position;
224@@ -4197,8 +4188,7 @@ gst_mxf_demux_pull_and_handle_klv_packet (GstMXFDemux * demux)
225 guint i;
226 for (i = 0; i < demux->essence_tracks->len; i++) {
227 GstMXFDemuxEssenceTrack *etrack =
228- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack,
229- i);
230+ g_ptr_array_index (demux->essence_tracks, i);
231
232 if (etrack->body_sid != partition->partition.body_sid)
233 continue;
234@@ -4669,9 +4659,8 @@ gst_mxf_demux_pad_to_track_and_position (GstMXFDemux * demux,
235 /* Get the corresponding essence track for the given source package and stream id */
236 for (i = 0; i < demux->essence_tracks->len; i++) {
237 GstMXFDemuxEssenceTrack *track =
238- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i);
239- GST_LOG_OBJECT (pad,
240- "Looking at essence track body_sid:%d index_sid:%d",
241+ g_ptr_array_index (demux->essence_tracks, i);
242+ GST_LOG_OBJECT (pad, "Looking at essence track body_sid:%d index_sid:%d",
243 track->body_sid, track->index_sid);
244 if (clip->source_track_id == 0 || (track->track_id == clip->source_track_id
245 && mxf_umid_is_equal (&clip->source_package_id,
246@@ -4920,8 +4909,7 @@ gst_mxf_demux_seek_push (GstMXFDemux * demux, GstEvent * event)
247 }
248
249 for (i = 0; i < demux->essence_tracks->len; i++) {
250- GstMXFDemuxEssenceTrack *t =
251- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i);
252+ GstMXFDemuxEssenceTrack *t = g_ptr_array_index (demux->essence_tracks, i);
253 t->position = -1;
254 }
255
256@@ -5359,8 +5347,7 @@ gst_mxf_demux_seek_pull (GstMXFDemux * demux, GstEvent * event)
257 }
258
259 for (i = 0; i < demux->essence_tracks->len; i++) {
260- GstMXFDemuxEssenceTrack *t =
261- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i);
262+ GstMXFDemuxEssenceTrack *t = g_ptr_array_index (demux->essence_tracks, i);
263 t->position = -1;
264 }
265
266@@ -5659,7 +5646,7 @@ gst_mxf_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
267
268 for (i = 0; i < demux->essence_tracks->len; i++) {
269 GstMXFDemuxEssenceTrack *t =
270- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i);
271+ g_ptr_array_index (demux->essence_tracks, i);
272
273 if (t->position > 0)
274 t->duration = t->position;
275@@ -5700,8 +5687,7 @@ gst_mxf_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
276
277 for (i = 0; i < demux->essence_tracks->len; i++) {
278 GstMXFDemuxEssenceTrack *etrack =
279- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack,
280- i);
281+ g_ptr_array_index (demux->essence_tracks, i);
282 etrack->position = -1;
283 }
284 ret = TRUE;
285@@ -5725,8 +5711,7 @@ gst_mxf_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
286
287 for (i = 0; i < demux->essence_tracks->len; i++) {
288 GstMXFDemuxEssenceTrack *t =
289- &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack,
290- i);
291+ g_ptr_array_index (demux->essence_tracks, i);
292 t->position = -1;
293 }
294 demux->current_partition = NULL;
295@@ -5999,7 +5984,7 @@ gst_mxf_demux_finalize (GObject * object)
296
297 g_ptr_array_free (demux->src, TRUE);
298 demux->src = NULL;
299- g_array_free (demux->essence_tracks, TRUE);
300+ g_ptr_array_free (demux->essence_tracks, TRUE);
301 demux->essence_tracks = NULL;
302
303 g_hash_table_destroy (demux->metadata);
304@@ -6076,8 +6061,8 @@ gst_mxf_demux_init (GstMXFDemux * demux)
305 g_rw_lock_init (&demux->metadata_lock);
306
307 demux->src = g_ptr_array_new ();
308- demux->essence_tracks =
309- g_array_new (FALSE, FALSE, sizeof (GstMXFDemuxEssenceTrack));
310+ demux->essence_tracks = g_ptr_array_new_with_free_func ((GDestroyNotify)
311+ gst_mxf_demux_essence_track_free);
312
313 gst_segment_init (&demux->segment, GST_FORMAT_TIME);
314
315diff --git a/gst/mxf/mxfdemux.h b/gst/mxf/mxfdemux.h
316index d079a1d..1dc8a4e 100644
317--- a/gst/mxf/mxfdemux.h
318+++ b/gst/mxf/mxfdemux.h
319@@ -266,7 +266,7 @@ struct _GstMXFDemux
320 GList *partitions;
321 GstMXFDemuxPartition *current_partition;
322
323- GArray *essence_tracks;
324+ GPtrArray *essence_tracks;
325
326 GList *pending_index_table_segments;
327 GList *index_tables; /* one per BodySID / IndexSID */
328--
3292.40.0
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.20.7.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.20.7.bb
index 219ebe4fa7..4151e54284 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.20.7.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.20.7.bb
@@ -15,6 +15,7 @@ SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad
15 file://CVE-2023-40476.patch \ 15 file://CVE-2023-40476.patch \
16 file://CVE-2023-44429.patch \ 16 file://CVE-2023-44429.patch \
17 file://CVE-2024-0444.patch \ 17 file://CVE-2024-0444.patch \
18 file://CVE-2023-44446.patch \
18 " 19 "
19SRC_URI[sha256sum] = "87251beebfd1325e5118cc67774061f6e8971761ca65a9e5957919610080d195" 20SRC_URI[sha256sum] = "87251beebfd1325e5118cc67774061f6e8971761ca65a9e5957919610080d195"
20 21