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)