mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-08 13:44:01 +08:00
nfsd: only fill out return pointer on success in nfsd4_lookup_stateid
In the case of a revoked delegation, we still fill out the pointer even when returning an error, which is bad form. Only overwrite the pointer on success. Signed-off-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
parent
019805fea9
commit
4d01416ab4
@ -6266,6 +6266,7 @@ nfsd4_lookup_stateid(struct nfsd4_compound_state *cstate,
|
||||
struct nfs4_stid **s, struct nfsd_net *nn)
|
||||
{
|
||||
__be32 status;
|
||||
struct nfs4_stid *stid;
|
||||
bool return_revoked = false;
|
||||
|
||||
/*
|
||||
@ -6288,15 +6289,16 @@ nfsd4_lookup_stateid(struct nfsd4_compound_state *cstate,
|
||||
}
|
||||
if (status)
|
||||
return status;
|
||||
*s = find_stateid_by_type(cstate->clp, stateid, typemask);
|
||||
if (!*s)
|
||||
stid = find_stateid_by_type(cstate->clp, stateid, typemask);
|
||||
if (!stid)
|
||||
return nfserr_bad_stateid;
|
||||
if (((*s)->sc_type == NFS4_REVOKED_DELEG_STID) && !return_revoked) {
|
||||
nfs4_put_stid(*s);
|
||||
if ((stid->sc_type == NFS4_REVOKED_DELEG_STID) && !return_revoked) {
|
||||
nfs4_put_stid(stid);
|
||||
if (cstate->minorversion)
|
||||
return nfserr_deleg_revoked;
|
||||
return nfserr_bad_stateid;
|
||||
}
|
||||
*s = stid;
|
||||
return nfs_ok;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user