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>
This commit is contained in:
parent
7b1f1fd184
commit
f05c124a70
1 changed files with 2 additions and 5 deletions
|
@ -304,10 +304,8 @@ static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args, stru
|
||||||
err = rpciod_up();
|
err = rpciod_up();
|
||||||
if (err)
|
if (err)
|
||||||
goto out_no_rpciod;
|
goto out_no_rpciod;
|
||||||
err = -EINVAL;
|
|
||||||
if (!xprt)
|
|
||||||
goto out_no_xprt;
|
|
||||||
|
|
||||||
|
err = -EINVAL;
|
||||||
if (args->version >= program->nrvers)
|
if (args->version >= program->nrvers)
|
||||||
goto out_err;
|
goto out_err;
|
||||||
version = program->version[args->version];
|
version = program->version[args->version];
|
||||||
|
@ -382,10 +380,9 @@ static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args, stru
|
||||||
out_no_stats:
|
out_no_stats:
|
||||||
kfree(clnt);
|
kfree(clnt);
|
||||||
out_err:
|
out_err:
|
||||||
xprt_put(xprt);
|
|
||||||
out_no_xprt:
|
|
||||||
rpciod_down();
|
rpciod_down();
|
||||||
out_no_rpciod:
|
out_no_rpciod:
|
||||||
|
xprt_put(xprt);
|
||||||
return ERR_PTR(err);
|
return ERR_PTR(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue