SUNRPC: Ensure that rpc_mkpipe returns a refcounted dentry
If not, we cannot guarantee that idmap->idmap_dentry, gss_auth->dentry and clnt->cl_dentry are valid dentries. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
24c5d9d7ea
commit
12de3b35ea
|
@ -132,6 +132,8 @@ nfs_idmap_delete(struct nfs4_client *clp)
|
|||
|
||||
if (!idmap)
|
||||
return;
|
||||
dput(idmap->idmap_dentry);
|
||||
idmap->idmap_dentry = NULL;
|
||||
rpc_unlink(idmap->idmap_path);
|
||||
clp->cl_idmap = NULL;
|
||||
kfree(idmap);
|
||||
|
|
|
@ -721,6 +721,8 @@ gss_destroy(struct rpc_auth *auth)
|
|||
|
||||
gss_auth = container_of(auth, struct gss_auth, rpc_auth);
|
||||
rpc_unlink(gss_auth->path);
|
||||
dput(gss_auth->dentry);
|
||||
gss_auth->dentry = NULL;
|
||||
gss_mech_put(gss_auth->mech);
|
||||
|
||||
rpcauth_free_credcache(auth);
|
||||
|
|
|
@ -240,6 +240,7 @@ rpc_clone_client(struct rpc_clnt *clnt)
|
|||
new->cl_autobind = 0;
|
||||
new->cl_oneshot = 0;
|
||||
new->cl_dead = 0;
|
||||
dget(new->cl_dentry);
|
||||
rpc_init_rtt(&new->cl_rtt_default, clnt->cl_xprt->timeout.to_initval);
|
||||
if (new->cl_auth)
|
||||
atomic_inc(&new->cl_auth->au_count);
|
||||
|
@ -314,6 +315,8 @@ rpc_destroy_client(struct rpc_clnt *clnt)
|
|||
if (clnt->cl_server != clnt->cl_inline_name)
|
||||
kfree(clnt->cl_server);
|
||||
out_free:
|
||||
if (clnt->cl_dentry)
|
||||
dput(clnt->cl_dentry);
|
||||
kfree(clnt);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -669,7 +669,7 @@ rpc_mkdir(char *path, struct rpc_clnt *rpc_client)
|
|||
out:
|
||||
mutex_unlock(&dir->i_mutex);
|
||||
rpc_release_path(&nd);
|
||||
return dentry;
|
||||
return dget(dentry);
|
||||
err_depopulate:
|
||||
rpc_depopulate(dentry);
|
||||
__rpc_rmdir(dir, dentry);
|
||||
|
@ -733,7 +733,7 @@ rpc_mkpipe(char *path, void *private, struct rpc_pipe_ops *ops, int flags)
|
|||
out:
|
||||
mutex_unlock(&dir->i_mutex);
|
||||
rpc_release_path(&nd);
|
||||
return dentry;
|
||||
return dget(dentry);
|
||||
err_dput:
|
||||
dput(dentry);
|
||||
dentry = ERR_PTR(-ENOMEM);
|
||||
|
|
Loading…
Reference in a new issue