youlong chen created ZOOKEEPER-5002:
---------------------------------------

             Summary: Resource Leak (File Descriptor Leak)
                 Key: ZOOKEEPER-5002
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-5002
             Project: ZooKeeper
          Issue Type: Bug
          Components: c client
    Affects Versions: 3.9.4
            Reporter: youlong chen


{*}Description{*}: In 
{{{}zookeeper-client/zookeeper-client-c/src/mt_adaptor.c{}}}, the {{pipe}} 
function leaks the listening socket {{lst}} if {{accept}} fails.

 
{code:java}
int pipe(int *fds) {
    // ...
    SOCKET lst=socket(AF_INET, SOCK_STREAM,IPPROTO_TCP);
    // ... bind, listen ...
    fds[0]=socket(AF_INET, SOCK_STREAM,0);
    // ... connect ...
    if ((fds[1]=accept(lst,0,0)) == INVALID_SOCKET){
       closesocket(fds[0]);
       return -1;     // <--- LEAK: lst is leaked here
    }
    closesocket(lst);
    return 0;
} {code}
 

This implementation of {{pipe}} (for Windows/platforms without native pipe?) 
leaks the listening socket {{lst}} if {{accept}} fails.

*Impact* File descriptor leak on Windows (or platforms using this emulation) if 
{{accept}} fails during pipe creation.

*Fix* Close {{lst}} before returning error.
{code:java}
    if ((fds[1]=accept(lst,0,0)) == INVALID_SOCKET){
       closesocket(fds[0]);
       closesocket(lst); // <--- Fix
       return -1;
    } {code}
 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to