summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core/glib-2.0/glib-2.0/CVE-2021-27219-02.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-core/glib-2.0/glib-2.0/CVE-2021-27219-02.patch')
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/CVE-2021-27219-02.patch249
1 files changed, 249 insertions, 0 deletions
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/CVE-2021-27219-02.patch b/meta/recipes-core/glib-2.0/glib-2.0/CVE-2021-27219-02.patch
new file mode 100644
index 0000000000..20137ea5f3
--- /dev/null
+++ b/meta/recipes-core/glib-2.0/glib-2.0/CVE-2021-27219-02.patch
@@ -0,0 +1,249 @@
1From be8834340a2d928ece82025463ae23dee2c333d0 Mon Sep 17 00:00:00 2001
2From: Philip Withnall <pwithnall@endlessos.org>
3Date: Thu, 4 Feb 2021 13:37:56 +0000
4Subject: [PATCH 02/11] gio: Use g_memdup2() instead of g_memdup() in obvious
5 places
6MIME-Version: 1.0
7Content-Type: text/plain; charset=UTF-8
8Content-Transfer-Encoding: 8bit
9
10Convert all the call sites which use `g_memdup()`’s length argument
11trivially (for example, by passing a `sizeof()`), so that they use
12`g_memdup2()` instead.
13
14In almost all of these cases the use of `g_memdup()` would not have
15caused problems, but it will soon be deprecated, so best port away from
16it.
17
18Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
19Helps: #2319
20
21Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
22CVE: CVE-2021-27219
23Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
24Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
25
26---
27 gio/gdbusconnection.c | 5 +++--
28 gio/gdbusinterfaceskeleton.c | 3 ++-
29 gio/gfile.c | 7 ++++---
30 gio/gsettingsschema.c | 5 +++--
31 gio/gwin32registrykey.c | 8 +++++---
32 gio/tests/async-close-output-stream.c | 6 ++++--
33 gio/tests/gdbus-export.c | 5 +++--
34 gio/win32/gwinhttpfile.c | 9 +++++----
35 8 files changed, 29 insertions(+), 19 deletions(-)
36
37--- a/gio/gdbusconnection.c
38+++ b/gio/gdbusconnection.c
39@@ -110,6 +110,7 @@
40 #include "gasyncinitable.h"
41 #include "giostream.h"
42 #include "gasyncresult.h"
43+#include "gstrfuncsprivate.h"
44 #include "gtask.h"
45 #include "gmarshal-internal.h"
46
47@@ -4007,7 +4008,7 @@ _g_dbus_interface_vtable_copy (const GDB
48 /* Don't waste memory by copying padding - remember to update this
49 * when changing struct _GDBusInterfaceVTable in gdbusconnection.h
50 */
51- return g_memdup ((gconstpointer) vtable, 3 * sizeof (gpointer));
52+ return g_memdup2 ((gconstpointer) vtable, 3 * sizeof (gpointer));
53 }
54
55 static void
56@@ -4024,7 +4025,7 @@ _g_dbus_subtree_vtable_copy (const GDBus
57 /* Don't waste memory by copying padding - remember to update this
58 * when changing struct _GDBusSubtreeVTable in gdbusconnection.h
59 */
60- return g_memdup ((gconstpointer) vtable, 3 * sizeof (gpointer));
61+ return g_memdup2 ((gconstpointer) vtable, 3 * sizeof (gpointer));
62 }
63
64 static void
65--- a/gio/gdbusinterfaceskeleton.c
66+++ b/gio/gdbusinterfaceskeleton.c
67@@ -28,6 +28,7 @@
68 #include "gdbusmethodinvocation.h"
69 #include "gdbusconnection.h"
70 #include "gmarshal-internal.h"
71+#include "gstrfuncsprivate.h"
72 #include "gtask.h"
73 #include "gioerror.h"
74
75@@ -701,7 +702,7 @@ add_connection_locked (GDBusInterfaceSke
76 * properly before building the hooked_vtable, so we create it
77 * once at the last minute.
78 */
79- interface_->priv->hooked_vtable = g_memdup (g_dbus_interface_skeleton_get_vtable (interface_), sizeof (GDBusInterfaceVTable));
80+ interface_->priv->hooked_vtable = g_memdup2 (g_dbus_interface_skeleton_get_vtable (interface_), sizeof (GDBusInterfaceVTable));
81 interface_->priv->hooked_vtable->method_call = skeleton_intercept_handle_method_call;
82 }
83
84--- a/gio/gfile.c
85+++ b/gio/gfile.c
86@@ -60,6 +60,7 @@
87 #include "gasyncresult.h"
88 #include "gioerror.h"
89 #include "glibintl.h"
90+#include "gstrfuncsprivate.h"
91
92
93 /**
94@@ -7854,7 +7855,7 @@ measure_disk_usage_progress (gboolean re
95 g_main_context_invoke_full (g_task_get_context (task),
96 g_task_get_priority (task),
97 measure_disk_usage_invoke_progress,
98- g_memdup (&progress, sizeof progress),
99+ g_memdup2 (&progress, sizeof progress),
100 g_free);
101 }
102
103@@ -7872,7 +7873,7 @@ measure_disk_usage_thread (GTask
104 data->progress_callback ? measure_disk_usage_progress : NULL, task,
105 &result.disk_usage, &result.num_dirs, &result.num_files,
106 &error))
107- g_task_return_pointer (task, g_memdup (&result, sizeof result), g_free);
108+ g_task_return_pointer (task, g_memdup2 (&result, sizeof result), g_free);
109 else
110 g_task_return_error (task, error);
111 }
112@@ -7896,7 +7897,7 @@ g_file_real_measure_disk_usage_async (GF
113
114 task = g_task_new (file, cancellable, callback, user_data);
115 g_task_set_source_tag (task, g_file_real_measure_disk_usage_async);
116- g_task_set_task_data (task, g_memdup (&data, sizeof data), g_free);
117+ g_task_set_task_data (task, g_memdup2 (&data, sizeof data), g_free);
118 g_task_set_priority (task, io_priority);
119
120 g_task_run_in_thread (task, measure_disk_usage_thread);
121--- a/gio/gsettingsschema.c
122+++ b/gio/gsettingsschema.c
123@@ -20,6 +20,7 @@
124
125 #include "gsettingsschema-internal.h"
126 #include "gsettings.h"
127+#include "gstrfuncsprivate.h"
128
129 #include "gvdb/gvdb-reader.h"
130 #include "strinfo.c"
131@@ -1067,9 +1068,9 @@ g_settings_schema_list_children (GSettin
132
133 if (g_str_has_suffix (key, "/"))
134 {
135- gint length = strlen (key);
136+ gsize length = strlen (key);
137
138- strv[j] = g_memdup (key, length);
139+ strv[j] = g_memdup2 (key, length);
140 strv[j][length - 1] = '\0';
141 j++;
142 }
143--- a/gio/gwin32registrykey.c
144+++ b/gio/gwin32registrykey.c
145@@ -28,6 +28,8 @@
146 #include <ntstatus.h>
147 #include <winternl.h>
148
149+#include "gstrfuncsprivate.h"
150+
151 #ifndef _WDMDDK_
152 typedef enum _KEY_INFORMATION_CLASS {
153 KeyBasicInformation,
154@@ -247,7 +249,7 @@ g_win32_registry_value_iter_copy (const
155 new_iter->value_name_size = iter->value_name_size;
156
157 if (iter->value_data != NULL)
158- new_iter->value_data = g_memdup (iter->value_data, iter->value_data_size);
159+ new_iter->value_data = g_memdup2 (iter->value_data, iter->value_data_size);
160
161 new_iter->value_data_size = iter->value_data_size;
162
163@@ -268,8 +270,8 @@ g_win32_registry_value_iter_copy (const
164 new_iter->value_data_expanded_charsize = iter->value_data_expanded_charsize;
165
166 if (iter->value_data_expanded_u8 != NULL)
167- new_iter->value_data_expanded_u8 = g_memdup (iter->value_data_expanded_u8,
168- iter->value_data_expanded_charsize);
169+ new_iter->value_data_expanded_u8 = g_memdup2 (iter->value_data_expanded_u8,
170+ iter->value_data_expanded_charsize);
171
172 new_iter->value_data_expanded_u8_size = iter->value_data_expanded_charsize;
173
174--- a/gio/tests/async-close-output-stream.c
175+++ b/gio/tests/async-close-output-stream.c
176@@ -24,6 +24,8 @@
177 #include <stdlib.h>
178 #include <string.h>
179
180+#include "gstrfuncsprivate.h"
181+
182 #define DATA_TO_WRITE "Hello world\n"
183
184 typedef struct
185@@ -147,9 +149,9 @@ prepare_data (SetupData *data,
186
187 data->expected_size = g_memory_output_stream_get_data_size (G_MEMORY_OUTPUT_STREAM (data->data_stream));
188
189- g_assert_cmpint (data->expected_size, >, 0);
190+ g_assert_cmpuint (data->expected_size, >, 0);
191
192- data->expected_output = g_memdup (written, (guint)data->expected_size);
193+ data->expected_output = g_memdup2 (written, data->expected_size);
194
195 /* then recreate the streams and prepare them for the asynchronous close */
196 destroy_streams (data);
197--- a/gio/tests/gdbus-export.c
198+++ b/gio/tests/gdbus-export.c
199@@ -23,6 +23,7 @@
200 #include <string.h>
201
202 #include "gdbus-tests.h"
203+#include "gstrfuncsprivate.h"
204
205 /* all tests rely on a shared mainloop */
206 static GMainLoop *loop = NULL;
207@@ -671,7 +672,7 @@ subtree_introspect (GDBusConnection
208 g_assert_not_reached ();
209 }
210
211- return g_memdup (interfaces, 2 * sizeof (void *));
212+ return g_memdup2 (interfaces, 2 * sizeof (void *));
213 }
214
215 static const GDBusInterfaceVTable *
216@@ -727,7 +728,7 @@ dynamic_subtree_introspect (GDBusConnect
217 {
218 const GDBusInterfaceInfo *interfaces[2] = { &dyna_interface_info, NULL };
219
220- return g_memdup (interfaces, 2 * sizeof (void *));
221+ return g_memdup2 (interfaces, 2 * sizeof (void *));
222 }
223
224 static const GDBusInterfaceVTable *
225--- a/gio/win32/gwinhttpfile.c
226+++ b/gio/win32/gwinhttpfile.c
227@@ -29,6 +29,7 @@
228 #include "gio/gfile.h"
229 #include "gio/gfileattribute.h"
230 #include "gio/gfileinfo.h"
231+#include "gstrfuncsprivate.h"
232 #include "gwinhttpfile.h"
233 #include "gwinhttpfileinputstream.h"
234 #include "gwinhttpfileoutputstream.h"
235@@ -393,10 +394,10 @@
236 child = g_object_new (G_TYPE_WINHTTP_FILE, NULL);
237 child->vfs = winhttp_file->vfs;
238 child->url = winhttp_file->url;
239- child->url.lpszScheme = g_memdup (winhttp_file->url.lpszScheme, (winhttp_file->url.dwSchemeLength+1)*2);
240- child->url.lpszHostName = g_memdup (winhttp_file->url.lpszHostName, (winhttp_file->url.dwHostNameLength+1)*2);
241- child->url.lpszUserName = g_memdup (winhttp_file->url.lpszUserName, (winhttp_file->url.dwUserNameLength+1)*2);
242- child->url.lpszPassword = g_memdup (winhttp_file->url.lpszPassword, (winhttp_file->url.dwPasswordLength+1)*2);
243+ child->url.lpszScheme = g_memdup2 (winhttp_file->url.lpszScheme, (winhttp_file->url.dwSchemeLength+1)*2);
244+ child->url.lpszHostName = g_memdup2 (winhttp_file->url.lpszHostName, (winhttp_file->url.dwHostNameLength+1)*2);
245+ child->url.lpszUserName = g_memdup2 (winhttp_file->url.lpszUserName, (winhttp_file->url.dwUserNameLength+1)*2);
246+ child->url.lpszPassword = g_memdup2 (winhttp_file->url.lpszPassword, (winhttp_file->url.dwPasswordLength+1)*2);
247 child->url.lpszUrlPath = wnew_path;
248 child->url.dwUrlPathLength = wcslen (wnew_path);
249 child->url.lpszExtraInfo = NULL;