diff options
author | iedowse <iedowse@FreeBSD.org> | 2002-02-16 17:05:49 +0000 |
---|---|---|
committer | iedowse <iedowse@FreeBSD.org> | 2002-02-16 17:05:49 +0000 |
commit | cfada7e2ddee51c5f8633c21aaab54d1945ab950 (patch) | |
tree | 95350dd3cda2b2f2bb653717b047324959818b94 /lib | |
parent | 16e403b1a10e182711fe8df83d64db848633d78f (diff) | |
download | FreeBSD-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.c | 9 |
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 */ } |