mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
net: wwan: iosm: validate msg_head before indexing msg_ring
ipc_protocol_free_msg_get() reads msg_head from shared memory and
uses it directly as an index into msg_ring[]. If the head is out
of range, the subsequent memset() writes beyond the message ring.
Validate head against IPC_MEM_MSG_ENTRIES before using it as an
index. The ring is a circular buffer, so a value outside the valid
range indicates a corrupted head pointer; report the error and fail
the allocation instead of writing out of bounds.
Fixes: 64516f633b ("net: iosm: protocol operations")
Cc: stable@vger.kernel.org
Reviewed-by: Fang Xieyan <fangxy@xiaopeng.com>
Signed-off-by: Liu Chao <liuc63@xiaopeng.com>
Reviewed-by: Loic Poulain <loic.poulain@oss.qualcomm.com>
Link: https://patch.msgid.link/20261020094254.4017726-1-liuc63@xiaopeng.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
77dac783f1
commit
46cbf85155
|
|
@ -14,6 +14,11 @@ ipc_protocol_free_msg_get(struct iosm_protocol *ipc_protocol, int *index)
|
|||
u32 new_head = (head + 1) % IPC_MEM_MSG_ENTRIES;
|
||||
union ipc_mem_msg_entry *msg;
|
||||
|
||||
if (head >= IPC_MEM_MSG_ENTRIES) {
|
||||
dev_err(ipc_protocol->dev, "invalid message head %u", head);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (new_head == le32_to_cpu(ipc_protocol->p_ap_shm->msg_tail)) {
|
||||
dev_err(ipc_protocol->dev, "message ring is full");
|
||||
return NULL;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user