NFSv4: Fix up nfs4_proc_lookup_mountpoint
Currently, we do not check the return value of client = rpc_clone_client(), nor do we shut down the resulting cloned rpc_clnt in the case where a NFS4ERR_WRONGSEC has caused nfs4_proc_lookup_common() to replace the original value of 'client' (causing a memory leak). Fix both issues and simplify the code by moving the call to rpc_clone_client() until after nfs4_proc_lookup_common() has done its business. Reported-by: Andy Adamson <andros@netapp.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
Родитель
eddffa4084
Коммит
b72888cb0b
|
@ -3071,15 +3071,13 @@ struct rpc_clnt *
|
|||
nfs4_proc_lookup_mountpoint(struct inode *dir, struct qstr *name,
|
||||
struct nfs_fh *fhandle, struct nfs_fattr *fattr)
|
||||
{
|
||||
struct rpc_clnt *client = NFS_CLIENT(dir);
|
||||
int status;
|
||||
struct rpc_clnt *client = rpc_clone_client(NFS_CLIENT(dir));
|
||||
|
||||
status = nfs4_proc_lookup_common(&client, dir, name, fhandle, fattr, NULL);
|
||||
if (status < 0) {
|
||||
rpc_shutdown_client(client);
|
||||
if (status < 0)
|
||||
return ERR_PTR(status);
|
||||
}
|
||||
return client;
|
||||
return (client == NFS_CLIENT(dir)) ? rpc_clone_client(client) : client;
|
||||
}
|
||||
|
||||
static int _nfs4_proc_access(struct inode *inode, struct nfs_access_entry *entry)
|
||||
|
|
Загрузка…
Ссылка в новой задаче