aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2018-01-21 10:21:18 -0800
committerGuy Harris <guy@alum.mit.edu>2018-01-21 10:21:18 -0800
commit83bd60614e0a6445c1be5549f1728347684cd889 (patch)
tree72a0861c5f1d056494300d11878ced88c9546fa4
parentedd3bb9947a23bfa46f1b1503d363a277c163526 (diff)
Free the socket temporary when appropriate.
If we're using threads, free it if the attempt to create the thread fails. If we're using subprocesses, free it in the parent process, which isn't using it. (We don't really teed the socket temporary if we're using subprocesses, as the socket value won't be overwritten - the multiple socket opens are done in separate processes.) This should fix Coverity CID 1418994.
-rwxr-xr-xrpcapd/rpcapd.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/rpcapd/rpcapd.c b/rpcapd/rpcapd.c
index cb5d4a0c..6699aa0f 100755
--- a/rpcapd/rpcapd.c
+++ b/rpcapd/rpcapd.c
@@ -388,9 +388,23 @@ void main_startup(void)
continue;
}
- // This trick is needed in order to allow the child thread to save the 'sockmain' variable
- // withouth getting it overwritten by the sock_open, in case we want to open more than one waiting sockets
- // For instance, the rpcapd_thread_create() will accept the socktemp variable, and it will deallocate immediately that variable
+ //
+ // This trick is needed in order to allow the child
+ // thread to save the 'sockmain' variable without
+ // getting it overwritten by the sock_open, in case
+ // we want to open more than one waiting socket.
+ //
+ // For instance, the rpcapd_thread_create() will
+ // accept the socktemp variable, and it will
+ // immediately deallocate that variable.
+ //
+ // XXX - this shouldn't be necessary if we're
+ // using subprocesses rather than threads, as
+ // the use and overwrite would be done in
+ // separate processes; we should be able to
+ // pass a pointer to sockmain in the child
+ // process.
+ //
socktemp = (SOCKET *) malloc (sizeof (SOCKET));
if (socktemp == NULL)
exit(0);
@@ -403,6 +417,7 @@ void main_startup(void)
if (threadId == 0)
{
SOCK_ASSERT("Error creating the passive child thread", 1);
+ free(socktemp);
continue;
}
CloseHandle(threadId);
@@ -413,6 +428,7 @@ void main_startup(void)
main_passive((void *) socktemp);
return;
}
+ free(socktemp);
#endif
tempaddrinfo = tempaddrinfo->ai_next;
}