]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
dbus-spawn: set SIGPIPE to SIG_IGN before activating services
authorRay Strode <rstrode@redhat.com>
Tue, 16 Oct 2012 18:38:28 +0000 (14:38 -0400)
committerRay Strode <rstrode@redhat.com>
Tue, 16 Oct 2012 18:44:55 +0000 (14:44 -0400)
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 <lennart@poettering.net>
https://bugzilla.redhat.com/show_bug.cgi?id=839258

dbus/dbus-spawn.c

index ef00801cc8de917ea04fc2683a49dbbcbef91d07..1e3a35162657f44545210827afe0cf4f8d9c51df 100644 (file)
@@ -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,