cifs: Fix xid leak in cifs_flock()
[ Upstream commit 575e079c782b9862ec2626403922d041a42e6ed6 ]
If not flock, before return -ENOLCK, should free the xid,
otherwise, the xid will be leaked.
Fixes: d0677992d2
("cifs: add support for flock")
Reviewed-by: Paulo Alcantara (SUSE) <pc@cjr.nz>
Signed-off-by: Zhang Xiaoxu <zhangxiaoxu5@huawei.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
bf49d4fe4a
commit
2d08311aa3
@@ -1735,11 +1735,13 @@ int cifs_flock(struct file *file, int cmd, struct file_lock *fl)
|
|||||||
struct cifsFileInfo *cfile;
|
struct cifsFileInfo *cfile;
|
||||||
__u32 type;
|
__u32 type;
|
||||||
|
|
||||||
rc = -EACCES;
|
|
||||||
xid = get_xid();
|
xid = get_xid();
|
||||||
|
|
||||||
if (!(fl->fl_flags & FL_FLOCK))
|
if (!(fl->fl_flags & FL_FLOCK)) {
|
||||||
return -ENOLCK;
|
rc = -ENOLCK;
|
||||||
|
free_xid(xid);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
cfile = (struct cifsFileInfo *)file->private_data;
|
cfile = (struct cifsFileInfo *)file->private_data;
|
||||||
tcon = tlink_tcon(cfile->tlink);
|
tcon = tlink_tcon(cfile->tlink);
|
||||||
@@ -1758,8 +1760,9 @@ int cifs_flock(struct file *file, int cmd, struct file_lock *fl)
|
|||||||
* if no lock or unlock then nothing to do since we do not
|
* if no lock or unlock then nothing to do since we do not
|
||||||
* know what it is
|
* know what it is
|
||||||
*/
|
*/
|
||||||
|
rc = -EOPNOTSUPP;
|
||||||
free_xid(xid);
|
free_xid(xid);
|
||||||
return -EOPNOTSUPP;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = cifs_setlk(file, fl, type, wait_flag, posix_lck, lock, unlock,
|
rc = cifs_setlk(file, fl, type, wait_flag, posix_lck, lock, unlock,
|
||||||
|
Reference in New Issue
Block a user