diff options
| author | Weston Andros Adamson <dros@netapp.com> | 2013-09-10 18:44:31 -0400 | 
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2013-09-11 09:07:27 -0400 | 
| commit | 7cb852dfc858e9ab092cbbfcb3e57bae4aa7f56a (patch) | |
| tree | 506ca48bbb01e1aacb6c40dbfdf9e5d571319704 | |
| parent | a02796250fe3e5fd053f33d90c1b3471617188a9 (diff) | |
NFSv4.1: fix SECINFO* use of put_rpccred
Recent SP4_MACH_CRED changes allows rpc_message.rpc_cred to change,
so keep a separate pointer to the machine cred for put_rpccred.
Signed-off-by: Weston Andros Adamson <dros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
| -rw-r--r-- | fs/nfs/nfs4proc.c | 16 | 
1 files changed, 10 insertions, 6 deletions
| diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 4aeb14e902d9..4b6a2f05b335 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -6003,10 +6003,12 @@ static int _nfs4_proc_secinfo(struct inode *dir, const struct qstr *name, struct  		.rpc_resp = &res,  	};  	struct rpc_clnt *clnt = NFS_SERVER(dir)->client; +	struct rpc_cred *cred = NULL;  	if (use_integrity) {  		clnt = NFS_SERVER(dir)->nfs_client->cl_rpcclient; -		msg.rpc_cred = nfs4_get_clid_cred(NFS_SERVER(dir)->nfs_client); +		cred = nfs4_get_clid_cred(NFS_SERVER(dir)->nfs_client); +		msg.rpc_cred = cred;  	}  	dprintk("NFS call  secinfo %s\n", name->name); @@ -6018,8 +6020,8 @@ static int _nfs4_proc_secinfo(struct inode *dir, const struct qstr *name, struct  				&res.seq_res, 0);  	dprintk("NFS reply  secinfo: %d\n", status); -	if (msg.rpc_cred) -		put_rpccred(msg.rpc_cred); +	if (cred) +		put_rpccred(cred);  	return status;  } @@ -7500,11 +7502,13 @@ _nfs41_proc_secinfo_no_name(struct nfs_server *server, struct nfs_fh *fhandle,  		.rpc_resp = &res,  	};  	struct rpc_clnt *clnt = server->client; +	struct rpc_cred *cred = NULL;  	int status;  	if (use_integrity) {  		clnt = server->nfs_client->cl_rpcclient; -		msg.rpc_cred = nfs4_get_clid_cred(server->nfs_client); +		cred = nfs4_get_clid_cred(server->nfs_client); +		msg.rpc_cred = cred;  	}  	dprintk("--> %s\n", __func__); @@ -7512,8 +7516,8 @@ _nfs41_proc_secinfo_no_name(struct nfs_server *server, struct nfs_fh *fhandle,  				&res.seq_res, 0);  	dprintk("<-- %s status=%d\n", __func__, status); -	if (msg.rpc_cred) -		put_rpccred(msg.rpc_cred); +	if (cred) +		put_rpccred(cred);  	return status;  } | 
