[packages/glib2] upstream fix for gnome-keyring-daemon using 100% cpu; rel 2
atler
atler at pld-linux.org
Tue Nov 8 12:56:46 CET 2022
commit 0873fb56f776c580e0fcf0b7bdadf6ab17887c92
Author: Jan Palus <atler at pld-linux.org>
Date: Tue Nov 8 12:54:54 2022 +0100
upstream fix for gnome-keyring-daemon using 100% cpu; rel 2
from: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3039
bug report: https://gitlab.gnome.org/GNOME/glib/-/issues/2795
glib2.spec | 4 +-
revert-fd-collision-handling.patch | 150 +++++++++++++++++++++++++++++++++++++
2 files changed, 153 insertions(+), 1 deletion(-)
---
diff --git a/glib2.spec b/glib2.spec
index 78d3932..a8006c9 100644
--- a/glib2.spec
+++ b/glib2.spec
@@ -21,7 +21,7 @@ Summary(tr.UTF-8): Yararlı ufak yordamlar kitaplığı
Summary(zh_CN.UTF-8): 实用工具函数库
Name: glib2
Version: 2.74.1
-Release: 1
+Release: 2
Epoch: 1
License: LGPL v2+
Group: Libraries
@@ -29,6 +29,7 @@ Source0: https://download.gnome.org/sources/glib/2.74/glib-%{version}.tar.xz
# Source0-md5: abcfe42128bbace7a63c795551131d93
Patch0: %{name}-python_shebang.patch
Patch1: gtk-doc-build.patch
+Patch2: revert-fd-collision-handling.patch
URL: https://www.gtk.org/
BuildRequires: docbook-dtd412-xml
BuildRequires: docbook-dtd45-xml
@@ -237,6 +238,7 @@ Sondy systemtap/dtrace dla GLib 2.
%setup -q -n glib-%{version}
%patch0 -p1
%patch1 -p1
+%patch2 -p1
%build
%meson build \
diff --git a/revert-fd-collision-handling.patch b/revert-fd-collision-handling.patch
new file mode 100644
index 0000000..2e99623
--- /dev/null
+++ b/revert-fd-collision-handling.patch
@@ -0,0 +1,150 @@
+From 2a36bb4b7e46f9ac043561c61f9a790786a5440c Mon Sep 17 00:00:00 2001
+From: Ray Strode <rstrode at redhat.com>
+Date: Fri, 28 Oct 2022 11:21:04 -0400
+Subject: [PATCH 1/2] Revert "Handling collision between standard i/o file
+ descriptors and newly created ones"
+
+g_unix_open_pipe tries to avoid the standard io fd range
+when getting pipe fds. This turns out to be a bad idea because
+certain buggy programs rely on it using that range.
+
+This reverts commit d9ba6150909818beb05573f54f26232063492c5b
+
+Closes: #2795
+Reopens: #16
+---
+ glib/glib-unix.c | 24 ------------------------
+ 1 file changed, 24 deletions(-)
+
+diff --git a/glib/glib-unix.c b/glib/glib-unix.c
+index 4710c51168..bc152d7663 100644
+--- a/glib/glib-unix.c
++++ b/glib/glib-unix.c
+@@ -108,17 +108,6 @@ g_unix_open_pipe (int *fds,
+ ecode = pipe2 (fds, pipe2_flags);
+ if (ecode == -1 && errno != ENOSYS)
+ return g_unix_set_error_from_errno (error, errno);
+- /* Don't reassign pipes to stdin, stdout, stderr if closed meanwhile */
+- else if (fds[0] < 3 || fds[1] < 3)
+- {
+- int old_fds[2] = { fds[0], fds[1] };
+- gboolean result = g_unix_open_pipe (fds, flags, error);
+- close (old_fds[0]);
+- close (old_fds[1]);
+-
+- if (!result)
+- g_unix_set_error_from_errno (error, errno);
+- }
+ else if (ecode == 0)
+ return TRUE;
+ /* Fall through on -ENOSYS, we must be running on an old kernel */
+@@ -127,19 +116,6 @@ g_unix_open_pipe (int *fds,
+ ecode = pipe (fds);
+ if (ecode == -1)
+ return g_unix_set_error_from_errno (error, errno);
+- /* Don't reassign pipes to stdin, stdout, stderr if closed meanwhile */
+- else if (fds[0] < 3 || fds[1] < 3)
+- {
+- int old_fds[2] = { fds[0], fds[1] };
+- gboolean result = g_unix_open_pipe (fds, flags, error);
+- close (old_fds[0]);
+- close (old_fds[1]);
+-
+- if (!result)
+- g_unix_set_error_from_errno (error, errno);
+-
+- return result;
+- }
+
+ if (flags == 0)
+ return TRUE;
+--
+GitLab
+
+
+From 1c1c452ff2030135e4abc2816e81b7078a845580 Mon Sep 17 00:00:00 2001
+From: Ray Strode <rstrode at redhat.com>
+Date: Mon, 31 Oct 2022 09:17:55 -0400
+Subject: [PATCH 2/2] glib-unix: Add test to make sure g_unix_open_pipe will
+ intrude standard range
+
+Now that we know it's a bad idea to avoid the standard io fd range
+when getting pipe fds for g_unix_open_pipe, we should test to make sure
+we don't inadvertently try to do it again.
+
+This commit adds that test.
+---
+ glib/tests/unix.c | 41 +++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 41 insertions(+)
+
+diff --git a/glib/tests/unix.c b/glib/tests/unix.c
+index 2112cab6bf..6c4a59dee7 100644
+--- a/glib/tests/unix.c
++++ b/glib/tests/unix.c
+@@ -24,8 +24,11 @@
+ #include "config.h"
+
+ #include "glib-unix.h"
++#include "gstdio.h"
++
+ #include <string.h>
+ #include <pwd.h>
++#include <unistd.h>
+
+ static void
+ test_pipe (void)
+@@ -52,6 +55,43 @@ test_pipe (void)
+ g_assert (g_str_has_prefix (buf, "hello"));
+ }
+
++static void
++test_pipe_stdio_overwrite (void)
++{
++ GError *error = NULL;
++ int pipefd[2], ret;
++ gboolean res;
++ int stdin_fd;
++
++
++ g_test_summary ("Test that g_unix_open_pipe() will use the first available FD, even if it’s stdin/stdout/stderr");
++ g_test_bug ("https://gitlab.gnome.org/GNOME/glib/-/issues/2795");
++
++ stdin_fd = dup (STDIN_FILENO);
++ g_assert_cmpint (stdin_fd, >, 0);
++
++ g_close (STDIN_FILENO, &error);
++ g_assert_no_error (error);
++
++ res = g_unix_open_pipe (pipefd, FD_CLOEXEC, &error);
++ g_assert_no_error (error);
++ g_assert_true (res);
++
++ g_assert_cmpint (pipefd[0], ==, STDIN_FILENO);
++
++ g_close (pipefd[0], &error);
++ g_assert_no_error (error);
++
++ g_close (pipefd[1], &error);
++ g_assert_no_error (error);
++
++ ret = dup2 (stdin_fd, STDIN_FILENO);
++ g_assert_cmpint (ret, >=, 0);
++
++ g_close (stdin_fd, &error);
++ g_assert_no_error (error);
++}
++
+ static void
+ test_error (void)
+ {
+@@ -337,6 +377,7 @@ main (int argc,
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/glib-unix/pipe", test_pipe);
++ g_test_add_func ("/glib-unix/pipe-stdio-overwrite", test_pipe_stdio_overwrite);
+ g_test_add_func ("/glib-unix/error", test_error);
+ g_test_add_func ("/glib-unix/nonblocking", test_nonblocking);
+ g_test_add_func ("/glib-unix/sighup", test_sighup);
+--
+GitLab
+
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/glib2.git/commitdiff/0873fb56f776c580e0fcf0b7bdadf6ab17887c92
More information about the pld-cvs-commit
mailing list