summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Sakoman <steve@sakoman.com>2020-08-03 06:41:55 -1000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-08-12 10:53:45 +0100
commitf4f66c0d586415248d55d88a98560cd12b4e43ea (patch)
tree678af26c22bffd9432c22c41c8d6473ed079e313
parentff84adc9d27ce182e4f5a813f2039f0642f9cfe6 (diff)
downloadpoky-f4f66c0d586415248d55d88a98560cd12b4e43ea.tar.gz
glib-2.0: update 2.62.4 to 2.62.5
Stable branch bug fix and security release. One patch updated, three removed since they are no longer needed Changes (from release notes): Fix potential relative read when calling g_printerr(), which could lead to a denial of service from a setuid-root process being used to block access to the TTY for another user (#1919) Fix SOCKS proxy resolver sometimes not being used when resolving addresses via Happy Eyeballs (CVE-2020-6750) (#1989) Several other Happy Eyeballs fixes for address resolution (#1871, #1872, #1902) Fix parsing of full Julian day range from $TZ environment variable (#1999) Several race condition/crash fixes (!1353, !1357) Bugs fixed: 1919 read from relative path in g_printerr() in 2.58.3 1995 Tracker issue for Happy Eyeballs regressions 1999 GTimeZone fails to accept full Julian day range when parsing the direct $TZ string format 1323 Backport !1314 “gtimezone: fix parsing of Julian day in POSIX TZ format” to glib-2-62 1331 Backport !1330 “W32: Correctly set st_ino when doing private stat()” to glib-2-62 1352 Backport !1351 “glib.supp: update g-threaded-resolver-getaddrinfo-config” to glib-2-62 1361 Backport !1353 GMainContext source reference fixes to glib-2-62 1365 Refactor g_socket_client_connect_async() 1370 Backport !1369 “build: Rework path construction to reliably add prefix” to glib-2-62 1371 Backport !1357 “gunixmounts: Make GUnixMountMonitor thread-safe” to glib-2-62 (From OE-Core rev: d1c337161f70893cd4eec15364c6c41d5040ccc6) Signed-off-by: Steve Sakoman <steve@sakoman.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-write-bindir-into-pkg-config-files.patch2
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/0011-GMainContext-Fix-GSource-iterator-if-iteration-can-m.patch43
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/0012-GMainContext-Fix-memory-leaks-and-memory-corruption-.patch109
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/0013-GMainContext-Move-mutex-unlocking-in-destructor-righ.patch36
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0_2.62.5.bb (renamed from meta/recipes-core/glib-2.0/glib-2.0_2.62.4.bb)7
5 files changed, 3 insertions, 194 deletions
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-write-bindir-into-pkg-config-files.patch b/meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-write-bindir-into-pkg-config-files.patch
index edac4c9f75..8dd959b7e2 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-write-bindir-into-pkg-config-files.patch
+++ b/meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-write-bindir-into-pkg-config-files.patch
@@ -22,7 +22,7 @@ index 71e88c4..8ce3987 100644
22@@ -831,14 +831,14 @@ pkg.generate(libgio, 22@@ -831,14 +831,14 @@ pkg.generate(libgio,
23 'schemasdir=' + join_paths('${datadir}', schemas_subdir), 23 'schemasdir=' + join_paths('${datadir}', schemas_subdir),
24 'bindir=' + join_paths('${prefix}', get_option('bindir')), 24 'bindir=' + join_paths('${prefix}', get_option('bindir')),
25 'giomoduledir=' + giomodulesdir, 25 'giomoduledir=' + pkgconfig_giomodulesdir,
26- 'gio=' + join_paths('${bindir}', 'gio'), 26- 'gio=' + join_paths('${bindir}', 'gio'),
27- 'gio_querymodules=' + join_paths('${bindir}', 'gio-querymodules'), 27- 'gio_querymodules=' + join_paths('${bindir}', 'gio-querymodules'),
28- 'glib_compile_schemas=' + join_paths('${bindir}', 'glib-compile-schemas'), 28- 'glib_compile_schemas=' + join_paths('${bindir}', 'glib-compile-schemas'),
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0011-GMainContext-Fix-GSource-iterator-if-iteration-can-m.patch b/meta/recipes-core/glib-2.0/glib-2.0/0011-GMainContext-Fix-GSource-iterator-if-iteration-can-m.patch
deleted file mode 100644
index 37b77d567c..0000000000
--- a/meta/recipes-core/glib-2.0/glib-2.0/0011-GMainContext-Fix-GSource-iterator-if-iteration-can-m.patch
+++ /dev/null
@@ -1,43 +0,0 @@
1From ef2be42998e3fc10299055a5a01f7c791538174c Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
3Date: Mon, 3 Feb 2020 15:38:28 +0200
4Subject: [PATCH] GMainContext - Fix GSource iterator if iteration can modify
5 the list
6
7We first have to ref the next source and then unref the previous one.
8This might be the last reference to the previous source, and freeing the
9previous source might unref and free the next one which would then leave
10use with a dangling pointer here.
11
12Fixes https://gitlab.gnome.org/GNOME/glib/issues/2031
13
14Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/commit/b06c48de7554607ff3fb58d6c0510cfa5088e909]
15
16---
17 glib/gmain.c | 8 ++++++--
18 1 file changed, 6 insertions(+), 2 deletions(-)
19
20diff --git a/glib/gmain.c b/glib/gmain.c
21index af979c8..a9a287d 100644
22--- a/glib/gmain.c
23+++ b/glib/gmain.c
24@@ -969,13 +969,17 @@ g_source_iter_next (GSourceIter *iter, GSource **source)
25 * GSourceList to be removed from source_lists (if iter->source is
26 * the only source in its list, and it is destroyed), so we have to
27 * keep it reffed until after we advance iter->current_list, above.
28+ *
29+ * Also we first have to ref the next source before unreffing the
30+ * previous one as unreffing the previous source can potentially
31+ * free the next one.
32 */
33+ if (next_source && iter->may_modify)
34+ g_source_ref (next_source);
35
36 if (iter->source && iter->may_modify)
37 g_source_unref_internal (iter->source, iter->context, TRUE);
38 iter->source = next_source;
39- if (iter->source && iter->may_modify)
40- g_source_ref (iter->source);
41
42 *source = iter->source;
43 return *source != NULL;
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0012-GMainContext-Fix-memory-leaks-and-memory-corruption-.patch b/meta/recipes-core/glib-2.0/glib-2.0/0012-GMainContext-Fix-memory-leaks-and-memory-corruption-.patch
deleted file mode 100644
index cf97d9d3db..0000000000
--- a/meta/recipes-core/glib-2.0/glib-2.0/0012-GMainContext-Fix-memory-leaks-and-memory-corruption-.patch
+++ /dev/null
@@ -1,109 +0,0 @@
1From 611430a32a46d0dc806a829161e2dccf9c0196a8 Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
3Date: Mon, 3 Feb 2020 15:35:51 +0200
4Subject: [PATCH] GMainContext - Fix memory leaks and memory corruption when
5 freeing sources while freeing a context
6
7Instead of destroying sources directly while freeing the context, and
8potentially freeing them if this was the last reference to them, collect
9new references of all sources in a separate list before and at the same
10time invalidate their context so that they can't access it anymore. Only
11once all sources have their context invalidated, destroy them while
12still keeping a reference to them. Once all sources are destroyed we get
13rid of the additional references and free them if nothing else keeps a
14reference to them anymore.
15
16This fixes a regression introduced by 26056558be in 2012.
17
18The previous code that invalidated the context of each source and then
19destroyed it before going to the next source without keeping an
20additional reference caused memory leaks or memory corruption depending
21on the order of the sources in the sources lists.
22
23If a source was destroyed it might happen that this was the last
24reference to this source, and it would then be freed. This would cause
25the finalize function to be called, which might destroy and unref
26another source and potentially free it. This other source would then
27either
28- go through the normal free logic and change the intern linked list
29 between the sources, while other sources that are unreffed as part of
30 the main context freeing would not. As such the list would be in an
31 inconsistent state and we might dereference freed memory.
32- go through the normal destroy and free logic but because the context
33 pointer was already invalidated it would simply mark the source as
34 destroyed without actually removing it from the context. This would
35 then cause a memory leak because the reference owned by the context is
36 not freed.
37
38Fixes https://github.com/gtk-rs/glib/issues/583 while still keeping
39https://bugzilla.gnome.org/show_bug.cgi?id=661767 fixes.
40
41Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/commit/aa20167d419c649f34fed06a9463890b41b1eba0]
42
43---
44 glib/gmain.c | 35 ++++++++++++++++++++++++++++++++++-
45 1 file changed, 34 insertions(+), 1 deletion(-)
46
47diff --git a/glib/gmain.c b/glib/gmain.c
48index a9a287d..10ba2f8 100644
49--- a/glib/gmain.c
50+++ b/glib/gmain.c
51@@ -538,6 +538,7 @@ g_main_context_unref (GMainContext *context)
52 GSourceIter iter;
53 GSource *source;
54 GList *sl_iter;
55+ GSList *s_iter, *remaining_sources = NULL;
56 GSourceList *list;
57 guint i;
58
59@@ -557,10 +558,30 @@ g_main_context_unref (GMainContext *context)
60
61 /* g_source_iter_next() assumes the context is locked. */
62 LOCK_CONTEXT (context);
63- g_source_iter_init (&iter, context, TRUE);
64+
65+ /* First collect all remaining sources from the sources lists and store a
66+ * new reference in a separate list. Also set the context of the sources
67+ * to NULL so that they can't access a partially destroyed context anymore.
68+ *
69+ * We have to do this first so that we have a strong reference to all
70+ * sources and destroying them below does not also free them, and so that
71+ * none of the sources can access the context from their finalize/dispose
72+ * functions. */
73+ g_source_iter_init (&iter, context, FALSE);
74 while (g_source_iter_next (&iter, &source))
75 {
76 source->context = NULL;
77+ remaining_sources = g_slist_prepend (remaining_sources, g_source_ref (source));
78+ }
79+ g_source_iter_clear (&iter);
80+
81+ /* Next destroy all sources. As we still hold a reference to all of them,
82+ * this won't cause any of them to be freed yet and especially prevents any
83+ * source that unrefs another source from its finalize function to be freed.
84+ */
85+ for (s_iter = remaining_sources; s_iter; s_iter = s_iter->next)
86+ {
87+ source = s_iter->data;
88 g_source_destroy_internal (source, context, TRUE);
89 }
90 UNLOCK_CONTEXT (context);
91@@ -585,6 +606,18 @@ g_main_context_unref (GMainContext *context)
92 g_cond_clear (&context->cond);
93
94 g_free (context);
95+
96+ /* And now finally get rid of our references to the sources. This will cause
97+ * them to be freed unless something else still has a reference to them. Due
98+ * to setting the context pointers in the sources to NULL above, this won't
99+ * ever access the context or the internal linked list inside the GSource.
100+ * We already removed the sources completely from the context above. */
101+ for (s_iter = remaining_sources; s_iter; s_iter = s_iter->next)
102+ {
103+ source = s_iter->data;
104+ g_source_unref_internal (source, NULL, FALSE);
105+ }
106+ g_slist_free (remaining_sources);
107 }
108
109 /* Helper function used by mainloop/overflow test.
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0013-GMainContext-Move-mutex-unlocking-in-destructor-righ.patch b/meta/recipes-core/glib-2.0/glib-2.0/0013-GMainContext-Move-mutex-unlocking-in-destructor-righ.patch
deleted file mode 100644
index 4c9e9f5182..0000000000
--- a/meta/recipes-core/glib-2.0/glib-2.0/0013-GMainContext-Move-mutex-unlocking-in-destructor-righ.patch
+++ /dev/null
@@ -1,36 +0,0 @@
1From 3e9d85f1b75e2b1096d9643563d7d17380752fc7 Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
3Date: Tue, 11 Feb 2020 09:34:38 +0200
4Subject: [PATCH] GMainContext - Move mutex unlocking in destructor right
5 before freeing the mutex
6
7This does not have any behaviour changes but is cleaner. The mutex is
8only unlocked now after all operations on the context are done and right
9before freeing the mutex and the context itself.
10
11Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/commit/730a75fc8e8271c38fbd5363d1f77a00876b9ddc]
12
13---
14 glib/gmain.c | 2 +-
15 1 file changed, 1 insertion(+), 1 deletion(-)
16
17diff --git a/glib/gmain.c b/glib/gmain.c
18index 10ba2f8..b1df470 100644
19--- a/glib/gmain.c
20+++ b/glib/gmain.c
21@@ -584,7 +584,6 @@ g_main_context_unref (GMainContext *context)
22 source = s_iter->data;
23 g_source_destroy_internal (source, context, TRUE);
24 }
25- UNLOCK_CONTEXT (context);
26
27 for (sl_iter = context->source_lists; sl_iter; sl_iter = sl_iter->next)
28 {
29@@ -595,6 +594,7 @@ g_main_context_unref (GMainContext *context)
30
31 g_hash_table_destroy (context->sources);
32
33+ UNLOCK_CONTEXT (context);
34 g_mutex_clear (&context->mutex);
35
36 g_ptr_array_free (context->pending_dispatches, TRUE);
diff --git a/meta/recipes-core/glib-2.0/glib-2.0_2.62.4.bb b/meta/recipes-core/glib-2.0/glib-2.0_2.62.5.bb
index d496235003..e463dd9b7c 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0_2.62.4.bb
+++ b/meta/recipes-core/glib-2.0/glib-2.0_2.62.5.bb
@@ -16,15 +16,12 @@ SRC_URI = "${GNOME_MIRROR}/glib/${SHRT_VER}/glib-${PV}.tar.xz \
16 file://0001-Do-not-write-bindir-into-pkg-config-files.patch \ 16 file://0001-Do-not-write-bindir-into-pkg-config-files.patch \
17 file://0001-meson-Run-atomics-test-on-clang-as-well.patch \ 17 file://0001-meson-Run-atomics-test-on-clang-as-well.patch \
18 file://0001-gio-tests-resources.c-comment-out-a-build-host-only-.patch \ 18 file://0001-gio-tests-resources.c-comment-out-a-build-host-only-.patch \
19 file://0011-GMainContext-Fix-GSource-iterator-if-iteration-can-m.patch \
20 file://0012-GMainContext-Fix-memory-leaks-and-memory-corruption-.patch \
21 file://0013-GMainContext-Move-mutex-unlocking-in-destructor-righ.patch \
22 " 19 "
23 20
24SRC_URI_append_class-native = " file://relocate-modules.patch" 21SRC_URI_append_class-native = " file://relocate-modules.patch"
25 22
26SRC_URI[md5sum] = "d52234ecba128932bed90bbc3553bfe5" 23SRC_URI[md5sum] = "4029ea2df04a8d4c360e45d9e8316784"
27SRC_URI[sha256sum] = "4c84030d77fa9712135dfa8036ad663925655ae95b1d19399b6200e869925bbc" 24SRC_URI[sha256sum] = "b8d1cdafa46658b63d7512efbe2cd21bd36cd7be83140e44930c47b79f82452e"
28 25
29# Find any meson cross files in FILESPATH that are relevant for the current 26# Find any meson cross files in FILESPATH that are relevant for the current
30# build (using siteinfo) and add them to EXTRA_OEMESON. 27# build (using siteinfo) and add them to EXTRA_OEMESON.