[Bug 1397250] [NEW] SIGPIPE not caught in do_atfork_child()

Launchpad Bug Tracker 1397250 at bugs.launchpad.net
Thu Oct 20 19:49:03 UTC 2016


You have been subscribed to a public bug by Jon Grimm (jgrimm):

Ubuntu version: Ubuntu 14.04.1 LTS
Package version: libnss-ldap_264-2.2ubuntu4

If a process using libnss-ldap calls fork() and SIGPIPE was blocked, the atfork() handler in the child process failed to catch the SIGPIPE as it was supposed to do, that is in the call to  do_close_no_unbind().  So that, the uncaught SIGPIPE will be eventually
delivered when the child unblocks signals. This usually make the child process die unexpectedly.

I found a well-known Linux vendor fixed this issue with the following
patch. This unblocks the SIGPIPE before calling do_close_no_unbind() and
restores the original sigmask afterwards:

diff -up nss_ldap/ldap-nss.c nss_ldap/ldap-nss.c
--- nss_ldap/ldap-nss.c 2009-12-07 20:57:33.000000000 -0500
+++ nss_ldap/ldap-nss.c 2009-12-07 20:58:56.000000000 -0500
@@ -532,8 +532,13 @@
 static void
 do_atfork_child (void)
 {
+  sigset_t unblock, mask;
   debug ("==> do_atfork_child");
+  sigemptyset(&unblock);
+  sigaddset(&unblock, SIGPIPE);
+  sigprocmask(SIG_UNBLOCK, &unblock, &mask);
   do_close_no_unbind ();
+  sigprocmask(SIG_SETMASK, &mask, NULL);
   _nss_ldap_leave ();
   debug ("<== do_atfork_child");
 }

I'd like to see this patch applied.

** Affects: nss-ldap
     Importance: Medium
         Status: Fix Released

** Affects: libnss-ldap (Ubuntu)
     Importance: High
     Assignee: Jon Grimm (jgrimm)
         Status: Triaged

** Affects: libnss-ldap (Ubuntu Trusty)
     Importance: Undecided
         Status: New

** Affects: libnss-ldap (Ubuntu Xenial)
     Importance: Undecided
         Status: New

** Affects: libnss-ldap (Ubuntu Yakkety)
     Importance: Undecided
         Status: New


** Tags: atfork fork sigpipe
-- 
SIGPIPE not caught in do_atfork_child()
https://bugs.launchpad.net/bugs/1397250
You received this bug notification because you are a member of Ubuntu Sponsors Team, which is subscribed to the bug report.



More information about the Ubuntu-sponsors mailing list