NFSD: Fix a null reference case in find_or_create_lock_stateid()
nfsd assigns the nfs4_free_lock_stateid to .sc_free in init_lock_stateid().
If nfsd doesn't go through init_lock_stateid() and put stateid at end,
there is a NULL reference to .sc_free when calling nfs4_put_stid(ns).
This patch let the nfs4_stid.sc_free assignment to nfs4_alloc_stid().
Cc: stable@vger.kernel.org
Fixes: 356a95ece7
"nfsd: clean up races in lock stateid searching..."
Signed-off-by: Kinglong Mee <kinglongmee@gmail.com>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:

committed by
J. Bruce Fields

parent
566cf877a1
commit
d19fb70dd6
@@ -223,10 +223,11 @@ nfsd4_alloc_layout_stateid(struct nfsd4_compound_state *cstate,
|
||||
struct nfs4_layout_stateid *ls;
|
||||
struct nfs4_stid *stp;
|
||||
|
||||
stp = nfs4_alloc_stid(cstate->clp, nfs4_layout_stateid_cache);
|
||||
stp = nfs4_alloc_stid(cstate->clp, nfs4_layout_stateid_cache,
|
||||
nfsd4_free_layout_stateid);
|
||||
if (!stp)
|
||||
return NULL;
|
||||
stp->sc_free = nfsd4_free_layout_stateid;
|
||||
|
||||
get_nfs4_file(fp);
|
||||
stp->sc_file = fp;
|
||||
|
||||
|
Reference in New Issue
Block a user