From 6112fceebda44924ca6cc82f2e507807d2ab4e3a Mon Sep 17 00:00:00 2001 From: Ian Dowse Date: Sat, 16 Feb 2002 17:05:49 +0000 Subject: [PATCH] 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(-) diff --git a/lib/libc/rpc/rpcb_clnt.c b/lib/libc/rpc/rpcb_clnt.c index b75c0a9987c..e1400cce1dd 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 */ }