summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Korsgaard <peter@korsgaard.com>2019-06-25 22:51:15 +0200
committerPeter Korsgaard <peter@korsgaard.com>2019-06-27 18:02:02 +0200
commit2df937ecb7b644c40f93781098375be0b4bc76eb (patch)
treeef43c4f7ac12fb76a8066f5a4ec4ea312418be8b
parentfb9dc56d77b8fff9cbfb9a159ec8fff9e848b2e7 (diff)
package/libglib2: backport upstream security fix for CVE-2019-12450
Fixes CVE-2019-12450: file_copy_fallback in gio/gfile.c in GNOME GLib 2.15.0 through 2.61.1 does not properly restrict file permissions while a copy operation is in progress. Instead, default permissions are used. Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
-rw-r--r--package/libglib2/0005-gfile-Limit-access-to-files-when-copying.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/package/libglib2/0005-gfile-Limit-access-to-files-when-copying.patch b/package/libglib2/0005-gfile-Limit-access-to-files-when-copying.patch
new file mode 100644
index 0000000000..750767dfbb
--- /dev/null
+++ b/package/libglib2/0005-gfile-Limit-access-to-files-when-copying.patch
@@ -0,0 +1,56 @@
+From cf09035d361287dfadc93f09272ce68b4a9457ad Mon Sep 17 00:00:00 2001
+From: Ondrej Holy <oholy@redhat.com>
+Date: Thu, 23 May 2019 10:41:53 +0200
+Subject: [PATCH] gfile: Limit access to files when copying
+
+file_copy_fallback creates new files with default permissions and
+set the correct permissions after the operation is finished. This
+might cause that the files can be accessible by more users during
+the operation than expected. Use G_FILE_CREATE_PRIVATE for the new
+files to limit access to those files.
+
+(cherry picked from commit d8f8f4d637ce43f8699ba94c9b7648beda0ca174)
+Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
+---
+ gio/gfile.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/gio/gfile.c b/gio/gfile.c
+index a67aad383..ff313ebf8 100644
+--- a/gio/gfile.c
++++ b/gio/gfile.c
+@@ -3279,12 +3279,12 @@ file_copy_fallback (GFile *source,
+ out = (GOutputStream*)_g_local_file_output_stream_replace (_g_local_file_get_filename (G_LOCAL_FILE (destination)),
+ FALSE, NULL,
+ flags & G_FILE_COPY_BACKUP,
+- G_FILE_CREATE_REPLACE_DESTINATION,
+- info,
++ G_FILE_CREATE_REPLACE_DESTINATION |
++ G_FILE_CREATE_PRIVATE, info,
+ cancellable, error);
+ else
+ out = (GOutputStream*)_g_local_file_output_stream_create (_g_local_file_get_filename (G_LOCAL_FILE (destination)),
+- FALSE, 0, info,
++ FALSE, G_FILE_CREATE_PRIVATE, info,
+ cancellable, error);
+ }
+ else if (flags & G_FILE_COPY_OVERWRITE)
+@@ -3292,12 +3292,13 @@ file_copy_fallback (GFile *source,
+ out = (GOutputStream *)g_file_replace (destination,
+ NULL,
+ flags & G_FILE_COPY_BACKUP,
+- G_FILE_CREATE_REPLACE_DESTINATION,
++ G_FILE_CREATE_REPLACE_DESTINATION |
++ G_FILE_CREATE_PRIVATE,
+ cancellable, error);
+ }
+ else
+ {
+- out = (GOutputStream *)g_file_create (destination, 0, cancellable, error);
++ out = (GOutputStream *)g_file_create (destination, G_FILE_CREATE_PRIVATE, cancellable, error);
+ }
+
+ if (!out)
+--
+2.11.0
+