aboutsummaryrefslogtreecommitdiffstats
path: root/main/dbus/avoid-opendir-between-fork-exec.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/dbus/avoid-opendir-between-fork-exec.patch')
-rw-r--r--main/dbus/avoid-opendir-between-fork-exec.patch18
1 files changed, 18 insertions, 0 deletions
diff --git a/main/dbus/avoid-opendir-between-fork-exec.patch b/main/dbus/avoid-opendir-between-fork-exec.patch
new file mode 100644
index 0000000000..44b03fbd5b
--- /dev/null
+++ b/main/dbus/avoid-opendir-between-fork-exec.patch
@@ -0,0 +1,18 @@
+Author: Rasmus Thomsen <oss@cogitri.dev>
+Upstream: No
+Reason: The code inside the `#ifdef __linux__` calls opendir. This can
+lead to deadlocks when act_on_fds_3_and_up is called between fork&exec since
+opendir mallocs which isn't async signal safe
+diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c
+index 0288dbc9..e585136f 100644
+--- a/dbus/dbus-sysdeps-unix.c
++++ b/dbus/dbus-sysdeps-unix.c
+@@ -4742,7 +4742,7 @@ act_on_fds_3_and_up (void (*func) (int fd))
+ {
+ int maxfds, i;
+
+-#ifdef __linux__
++#if defined(__linux__) && defined(__GLIBC__)
+ DIR *d;
+
+ /* On Linux we can optimize this a bit if /proc is available. If it