diff options
author | Guy Harris <guy@alum.mit.edu> | 2018-01-21 10:21:18 -0800 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2018-01-21 10:21:18 -0800 |
commit | 83bd60614e0a6445c1be5549f1728347684cd889 (patch) | |
tree | 72a0861c5f1d056494300d11878ced88c9546fa4 | |
parent | edd3bb9947a23bfa46f1b1503d363a277c163526 (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-x | rpcapd/rpcapd.c | 22 |
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; } |