From c75af2b0560827c3ff680553bd2d77201ff86a1e Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Tue, 16 Oct 2012 14:38:28 -0400 Subject: [PATCH] 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. https://bugzilla.redhat.com/show_bug.cgi?id=839258 --- dbus/dbus-spawn.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dbus/dbus-spawn.c b/dbus/dbus-spawn.c index ef00801..1e3a351 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, -- 1.7.12.1