summaryrefslogtreecommitdiffstats
path: root/net/sunrpc
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2013-04-05 20:13:21 +0200
committerTrond Myklebust <Trond.Myklebust@netapp.com>2013-04-05 23:02:14 +0200
commitf05c124a70a4953a66acbd6d6c601ea1eb5d0fa7 (patch)
tree63d6148281fb3ebaf810d705c0813238755c0581 /net/sunrpc
parentNFSv4/4.1: Fix bugs in nfs4[01]_walk_client_list (diff)
downloadlinux-f05c124a70a4953a66acbd6d6c601ea1eb5d0fa7.tar.xz
linux-f05c124a70a4953a66acbd6d6c601ea1eb5d0fa7.zip
SUNRPC: Fix a potential memory leak in rpc_new_client
If the call to rpciod_up() fails, we currently leak a reference to the struct rpc_xprt. As part of the fix, we also remove the redundant check for xprt!=NULL. This is already taken care of by the callers. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net/sunrpc')
-rw-r--r--net/sunrpc/clnt.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index 9df26b785dc7..d5f35f15af98 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -304,10 +304,8 @@ static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args, stru
err = rpciod_up();
if (err)
goto out_no_rpciod;
- err = -EINVAL;
- if (!xprt)
- goto out_no_xprt;
+ err = -EINVAL;
if (args->version >= program->nrvers)
goto out_err;
version = program->version[args->version];
@@ -382,10 +380,9 @@ out_no_principal:
out_no_stats:
kfree(clnt);
out_err:
- xprt_put(xprt);
-out_no_xprt:
rpciod_down();
out_no_rpciod:
+ xprt_put(xprt);
return ERR_PTR(err);
}