From: Ray Strode Date: Tue, 16 Oct 2012 18:38:28 +0000 (-0400) Subject: dbus-spawn: set SIGPIPE to SIG_IGN before activating services X-Git-Tag: dbus-1.7.0~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=90f939f155bd120f44ff3906296707a6c00cd462;p=thirdparty%2Fdbus.git dbus-spawn: set SIGPIPE to SIG_IGN before activating services dbus's service activation code sets SIGPIPE to SIG_DFL as a sort of poor man's prctl(... PR_SET_PDEATHSIG) to detect when the parent goes away. It neglects to reignore the infamous signal before performing activation, however. This means if, for instance, journald is restarted all services activated after it will die with SIGPIPE when logging messages unless they explicitly ignore SIGPIPE themselves. This commit changes dbus's service activation code to correctly ignore SIGPIPE to protect activated services from a gruesome, premature death. Reviewed-by: Lennart Poettering https://bugzilla.redhat.com/show_bug.cgi?id=839258 --- diff --git a/dbus/dbus-spawn.c b/dbus/dbus-spawn.c index ef00801cc..1e3a35162 100644 --- a/dbus/dbus-spawn.c +++ b/dbus/dbus-spawn.c @@ -1256,7 +1256,11 @@ _dbus_spawn_async_with_babysitter (DBusBabysitter **sitter_p, _dbus_assert_not_reached ("Got to code after write_err_and_exit()"); } else if (grandchild_pid == 0) - { + { + /* Go back to ignoring SIGPIPE, since it's evil + */ + signal (SIGPIPE, SIG_IGN); + do_exec (child_err_report_pipe[WRITE_END], argv, env,