[Bug 2158] New: Race condition in receiving SIGTERM
    bugzilla-daemon at mindrot.org 
    bugzilla-daemon at mindrot.org
       
    Wed Oct  9 05:39:53 EST 2013
    
    
  
https://bugzilla.mindrot.org/show_bug.cgi?id=2158
            Bug ID: 2158
           Summary: Race condition in receiving SIGTERM
           Product: Portable OpenSSH
           Version: 6.2p1
          Hardware: All
                OS: Linux
            Status: NEW
          Severity: minor
          Priority: P5
         Component: sshd
          Assignee: unassigned-bugs at mindrot.org
          Reporter: ben.maurer at gmail.com
To handle sigterm, openssh uses this handler:
static void
sigterm_handler(int sig)
{
    received_sigterm = sig;
}
in the select loop, it checks this flag
ret = select(maxfd+1, fdset, NULL, NULL, NULL);
...
if (received_sigterm) {
select() will return -1 with an EINTR when it gets a signal. Therefore,
in most cases this successfully shuts down the process. However, if SSH
were executing something other than this select call (eg, accepting a
new connection) it would never notice the sigterm until a new event
came in.
This created a race condition in a large, real world deployment. The
default init script in the openssh package sends a SIGTERM in order to
kill the process. On a small fraction of servers, the race condition
mentioned here occurred. The new openssh process was launched while the
old one still ran. When the new process attempted to bind() to a port,
it failed.
-- 
You are receiving this mail because:
You are watching the assignee of the bug.
    
    
More information about the openssh-bugs
mailing list