From cfada7e2ddee51c5f8633c21aaab54d1945ab950 Mon Sep 17 00:00:00 2001 From: iedowse Date: Sat, 16 Feb 2002 17:05:49 +0000 Subject: 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 --- lib/libc/rpc/rpcb_clnt.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'lib') 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 */ } -- cgit v1.1