summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authoriedowse <iedowse@FreeBSD.org>2002-02-16 17:05:49 +0000
committeriedowse <iedowse@FreeBSD.org>2002-02-16 17:05:49 +0000
commitcfada7e2ddee51c5f8633c21aaab54d1945ab950 (patch)
tree95350dd3cda2b2f2bb653717b047324959818b94 /lib
parent16e403b1a10e182711fe8df83d64db848633d78f (diff)
downloadFreeBSD-src-cfada7e2ddee51c5f8633c21aaab54d1945ab950.zip
FreeBSD-src-cfada7e2ddee51c5f8633c21aaab54d1945ab950.tar.gz
Fix two file descriptor leaks in the internal function local_rpcb()
that is used by a number of rpcbind-related library functions. Also fix a rpc client leak in rpcb_set(). Submitted by: mbr Obtained from: NetBSD
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/rpc/rpcb_clnt.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/libc/rpc/rpcb_clnt.c b/lib/libc/rpc/rpcb_clnt.c
index b75c0a9..e1400cc 100644
--- a/lib/libc/rpc/rpcb_clnt.c
+++ b/lib/libc/rpc/rpcb_clnt.c
@@ -459,8 +459,14 @@ local_rpcb()
client = clnt_vc_create(sock, &nbuf, (rpcprog_t)RPCBPROG,
(rpcvers_t)RPCBVERS, tsize, tsize);
- if (client != NULL)
+ if (client != NULL) {
+ /* Mark the socket to be closed in destructor */
+ (void) CLNT_CONTROL(client, CLSET_FD_CLOSE, NULL);
return client;
+ }
+
+ /* Nobody needs this socket anymore; free the descriptor. */
+ _close(sock);
try_nconf:
@@ -552,6 +558,7 @@ rpcb_set(program, version, nconf, address)
parms.r_addr = taddr2uaddr((struct netconfig *) nconf,
(struct netbuf *)address);
if (!parms.r_addr) {
+ CLNT_DESTROY(client);
rpc_createerr.cf_stat = RPC_N2AXLATEFAILURE;
return (FALSE); /* no universal address */
}
OpenPOWER on IntegriCloud