mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
ksmbd: transport_ipc: validate payload size before reading handle
handle_response() dereferences the payload as a 4-byte handle without
verifying that the declared payload size is at least 4 bytes. A malformed
or truncated message from ksmbd.mountd can lead to a 4-byte read past the
declared payload size. Validate the size before dereferencing.
This is a minimal fix to guard the initial handle read.
Fixes: 0626e6641f ("cifsd: add server handler for central processing and tranport layers")
Cc: stable@vger.kernel.org
Reported-by: Qianchang Zhao <pioooooooooip@gmail.com>
Signed-off-by: Qianchang Zhao <pioooooooooip@gmail.com>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
committed by
Steve French
parent
dcb6fa37fd
commit
6f40e50ceb
@@ -263,10 +263,16 @@ static void ipc_msg_handle_free(int handle)
|
||||
|
||||
static int handle_response(int type, void *payload, size_t sz)
|
||||
{
|
||||
unsigned int handle = *(unsigned int *)payload;
|
||||
unsigned int handle;
|
||||
struct ipc_msg_table_entry *entry;
|
||||
int ret = 0;
|
||||
|
||||
/* Prevent 4-byte read beyond declared payload size */
|
||||
if (sz < sizeof(unsigned int))
|
||||
return -EINVAL;
|
||||
|
||||
handle = *(unsigned int *)payload;
|
||||
|
||||
ipc_update_last_active();
|
||||
down_read(&ipc_msg_table_lock);
|
||||
hash_for_each_possible(ipc_msg_table, entry, ipc_table_hlist, handle) {
|
||||
|
||||
Reference in New Issue
Block a user