From: Jean-Louis Fuchs Date: Mon, 28 Sep 2020 12:45:15 +0000 (+0200) Subject: disable fork-malloc-exec for non-glibc-systems X-Git-Tag: dbus-1.12.22~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d13349f25ce6160695237cb1715bc3a8e2fa8985;p=thirdparty%2Fdbus.git disable fork-malloc-exec for non-glibc-systems Calling malloc() after fork is undefined behaviour if the process is multi-threaded. locks held by a thread on fork() will never be released. malloc() is usally protected by a lock and can therefore deadlock. glibc is known not to deadlock in this case. This commit does not rule out other problems on glibc-systems, but fixes an issue on musl-libc-systems. Only restricting to async-signal safe functions between fork() and exec() prevents undefined behaviour for sure. See signal-safety(7). (cherry picked from commit 3fab06d68f5940cde89fb9c7e647bdc48bc7b253) --- diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c index e511afc5d..06cea5a09 100644 --- a/dbus/dbus-sysdeps-unix.c +++ b/dbus/dbus-sysdeps-unix.c @@ -4471,7 +4471,7 @@ _dbus_close_all (void) { 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