diff options
author | Ronnie Sahlberg <lsahlber@redhat.com> | 2020-07-09 20:39:49 +1000 |
---|---|---|
committer | Steve French <stfrench@microsoft.com> | 2020-07-09 10:06:52 -0500 |
commit | a77592a70081edb58a95b9da18fd5a2882a25666 (patch) | |
tree | f5a2039f848d64bec99e120c65c4e6261b3eed8b /fs | |
parent | 8668115cf2db40e22e7be02652a3673d8d30c9f0 (diff) | |
download | linux-a77592a70081edb58a95b9da18fd5a2882a25666.tar.bz2 |
cifs: fix reference leak for tlink
Don't leak a reference to tlink during the NOTIFY ioctl
Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
CC: Stable <stable@vger.kernel.org> # v5.6+
Diffstat (limited to 'fs')
-rw-r--r-- | fs/cifs/ioctl.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/cifs/ioctl.c b/fs/cifs/ioctl.c index 4a73e63c4d43..dcde44ff6cf9 100644 --- a/fs/cifs/ioctl.c +++ b/fs/cifs/ioctl.c @@ -169,6 +169,7 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg) unsigned int xid; struct cifsFileInfo *pSMBFile = filep->private_data; struct cifs_tcon *tcon; + struct tcon_link *tlink; struct cifs_sb_info *cifs_sb; __u64 ExtAttrBits = 0; __u64 caps; @@ -307,13 +308,19 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg) break; } cifs_sb = CIFS_SB(inode->i_sb); - tcon = tlink_tcon(cifs_sb_tlink(cifs_sb)); + tlink = cifs_sb_tlink(cifs_sb); + if (IS_ERR(tlink)) { + rc = PTR_ERR(tlink); + break; + } + tcon = tlink_tcon(tlink); if (tcon && tcon->ses->server->ops->notify) { rc = tcon->ses->server->ops->notify(xid, filep, (void __user *)arg); cifs_dbg(FYI, "ioctl notify rc %d\n", rc); } else rc = -EOPNOTSUPP; + cifs_put_tlink(tlink); break; default: cifs_dbg(FYI, "unsupported ioctl\n"); |