NFSv4.2 fix memory leak in nfs42_ssc_open
authorOlga Kornievskaia <kolga@netapp.com>
Fri, 15 Nov 2019 20:13:19 +0000 (15:13 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Mon, 18 Nov 2019 09:50:41 +0000 (10:50 +0100)
Static analysis with Coverity detected a memory leak

Reported-by: Colin King <colin.king@canonical.com>
Fixes: ec4b09250898 ("NFS: inter ssc open")
Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/nfs4file.c

index ef8c16779f4cfba0e3a742a49169113f64ee8601..620de905cba97aff3c958b7756fcba6169a4a651 100644 (file)
@@ -318,7 +318,7 @@ nfs42_ssc_open(struct vfsmount *ss_mnt, struct nfs_fh *src_fh,
        struct inode *r_ino = NULL;
        struct nfs_open_context *ctx;
        struct nfs4_state_owner *sp;
-       char *read_name;
+       char *read_name = NULL;
        int len, status = 0;
 
        server = NFS_SERVER(ss_mnt->mnt_root->d_inode);
@@ -342,14 +342,14 @@ nfs42_ssc_open(struct vfsmount *ss_mnt, struct nfs_fh *src_fh,
                        NULL);
        if (IS_ERR(r_ino)) {
                res = ERR_CAST(r_ino);
-               goto out;
+               goto out_free_name;
        }
 
        filep = alloc_file_pseudo(r_ino, ss_mnt, read_name, FMODE_READ,
                                     r_ino->i_fop);
        if (IS_ERR(filep)) {
                res = ERR_CAST(filep);
-               goto out;
+               goto out_free_name;
        }
        filep->f_mode |= FMODE_READ;
 
@@ -380,6 +380,8 @@ nfs42_ssc_open(struct vfsmount *ss_mnt, struct nfs_fh *src_fh,
 
        file_ra_state_init(&filep->f_ra, filep->f_mapping->host->i_mapping);
        res = filep;
+out_free_name:
+       kfree(read_name);
 out:
        return res;
 out_stateowner:
@@ -388,7 +390,7 @@ out_ctx:
        put_nfs_open_context(ctx);
 out_filep:
        fput(filep);
-       goto out;
+       goto out_free_name;
 }
 EXPORT_SYMBOL_GPL(nfs42_ssc_open);
 void nfs42_ssc_close(struct file *filep)