cifs: Fix potential OOB access of lock element array
If maxBuf is small but non-zero, it could result in a zero sized lock element array which we would then try and access OOB. Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com> Signed-off-by: Steve French <stfrench@microsoft.com> CC: Stable <stable@vger.kernel.org>
This commit is contained in:
parent
92a8109e4d
commit
b9a74cde94
@ -1132,10 +1132,10 @@ cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Accessing maxBuf is racy with cifs_reconnect - need to store value
|
* Accessing maxBuf is racy with cifs_reconnect - need to store value
|
||||||
* and check it for zero before using.
|
* and check it before using.
|
||||||
*/
|
*/
|
||||||
max_buf = tcon->ses->server->maxBuf;
|
max_buf = tcon->ses->server->maxBuf;
|
||||||
if (!max_buf) {
|
if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE))) {
|
||||||
free_xid(xid);
|
free_xid(xid);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
@ -1476,10 +1476,10 @@ cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Accessing maxBuf is racy with cifs_reconnect - need to store value
|
* Accessing maxBuf is racy with cifs_reconnect - need to store value
|
||||||
* and check it for zero before using.
|
* and check it before using.
|
||||||
*/
|
*/
|
||||||
max_buf = tcon->ses->server->maxBuf;
|
max_buf = tcon->ses->server->maxBuf;
|
||||||
if (!max_buf)
|
if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE)))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
|
BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
|
||||||
|
@ -122,10 +122,10 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Accessing maxBuf is racy with cifs_reconnect - need to store value
|
* Accessing maxBuf is racy with cifs_reconnect - need to store value
|
||||||
* and check it for zero before using.
|
* and check it before using.
|
||||||
*/
|
*/
|
||||||
max_buf = tcon->ses->server->maxBuf;
|
max_buf = tcon->ses->server->maxBuf;
|
||||||
if (!max_buf)
|
if (max_buf < sizeof(struct smb2_lock_element))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
BUILD_BUG_ON(sizeof(struct smb2_lock_element) > PAGE_SIZE);
|
BUILD_BUG_ON(sizeof(struct smb2_lock_element) > PAGE_SIZE);
|
||||||
|
Loading…
Reference in New Issue
Block a user