Commit 7cb852df authored by Weston Andros Adamson's avatar Weston Andros Adamson Committed by Trond Myklebust

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: default avatarWeston Andros Adamson <dros@netapp.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent a0279625
...@@ -6003,10 +6003,12 @@ static int _nfs4_proc_secinfo(struct inode *dir, const struct qstr *name, struct ...@@ -6003,10 +6003,12 @@ static int _nfs4_proc_secinfo(struct inode *dir, const struct qstr *name, struct
.rpc_resp = &res, .rpc_resp = &res,
}; };
struct rpc_clnt *clnt = NFS_SERVER(dir)->client; struct rpc_clnt *clnt = NFS_SERVER(dir)->client;
struct rpc_cred *cred = NULL;
if (use_integrity) { if (use_integrity) {
clnt = NFS_SERVER(dir)->nfs_client->cl_rpcclient; 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); 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 ...@@ -6018,8 +6020,8 @@ static int _nfs4_proc_secinfo(struct inode *dir, const struct qstr *name, struct
&res.seq_res, 0); &res.seq_res, 0);
dprintk("NFS reply secinfo: %d\n", status); dprintk("NFS reply secinfo: %d\n", status);
if (msg.rpc_cred) if (cred)
put_rpccred(msg.rpc_cred); put_rpccred(cred);
return status; return status;
} }
...@@ -7500,11 +7502,13 @@ _nfs41_proc_secinfo_no_name(struct nfs_server *server, struct nfs_fh *fhandle, ...@@ -7500,11 +7502,13 @@ _nfs41_proc_secinfo_no_name(struct nfs_server *server, struct nfs_fh *fhandle,
.rpc_resp = &res, .rpc_resp = &res,
}; };
struct rpc_clnt *clnt = server->client; struct rpc_clnt *clnt = server->client;
struct rpc_cred *cred = NULL;
int status; int status;
if (use_integrity) { if (use_integrity) {
clnt = server->nfs_client->cl_rpcclient; 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__); dprintk("--> %s\n", __func__);
...@@ -7512,8 +7516,8 @@ _nfs41_proc_secinfo_no_name(struct nfs_server *server, struct nfs_fh *fhandle, ...@@ -7512,8 +7516,8 @@ _nfs41_proc_secinfo_no_name(struct nfs_server *server, struct nfs_fh *fhandle,
&res.seq_res, 0); &res.seq_res, 0);
dprintk("<-- %s status=%d\n", __func__, status); dprintk("<-- %s status=%d\n", __func__, status);
if (msg.rpc_cred) if (cred)
put_rpccred(msg.rpc_cred); put_rpccred(cred);
return status; return status;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment