NFSD: clean up alloc_init_deleg()
authorSicong Huang <huangsicong@iie.ac.cn>
Thu, 12 Oct 2023 08:34:58 +0000 (16:34 +0800)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 16 Oct 2023 16:44:40 +0000 (12:44 -0400)
Modify the conditional statement for null pointer check in the function
'alloc_init_deleg' to make this function more robust and clear. Otherwise,
this function may have potential pointer dereference problem in the future,
when modifying or expanding the nfs4_delegation structure.

Signed-off-by: Sicong Huang <huangsicong@iie.ac.cn>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/nfs4state.c

index 54ad16d6d92009c4e9ef2e313ebfd8ff89312671..65fd5510323a3a76845308a8d5d21460dd78a578 100644 (file)
@@ -1160,6 +1160,7 @@ alloc_init_deleg(struct nfs4_client *clp, struct nfs4_file *fp,
                 struct nfs4_clnt_odstate *odstate, u32 dl_type)
 {
        struct nfs4_delegation *dp;
+       struct nfs4_stid *stid;
        long n;
 
        dprintk("NFSD alloc_init_deleg\n");
@@ -1168,9 +1169,10 @@ alloc_init_deleg(struct nfs4_client *clp, struct nfs4_file *fp,
                goto out_dec;
        if (delegation_blocked(&fp->fi_fhandle))
                goto out_dec;
-       dp = delegstateid(nfs4_alloc_stid(clp, deleg_slab, nfs4_free_deleg));
-       if (dp == NULL)
+       stid = nfs4_alloc_stid(clp, deleg_slab, nfs4_free_deleg);
+       if (stid == NULL)
                goto out_dec;
+       dp = delegstateid(stid);
 
        /*
         * delegation seqid's are never incremented.  The 4.1 special