]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ALSA: firewire-motu: add bounds check in put_user loop for DSP events
authorJunrui Luo <moonafterrain@outlook.com>
Tue, 9 Dec 2025 05:16:41 +0000 (13:16 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 18 Dec 2025 13:00:13 +0000 (14:00 +0100)
[ Upstream commit 298e753880b6ea99ac30df34959a7a03b0878eed ]

In the DSP event handling code, a put_user() loop copies event data.
When the user buffer size is not aligned to 4 bytes, it could overwrite
beyond the buffer boundary.

Fix by adding a bounds check before put_user().

Suggested-by: Takashi Iwai <tiwai@suse.de>
Fixes: 634ec0b2906e ("ALSA: firewire-motu: notify event for parameter change in register DSP model")
Signed-off-by: Junrui Luo <moonafterrain@outlook.com>
Link: https://patch.msgid.link/SYBPR01MB788112C72AF8A1C8C448B4B8AFA3A@SYBPR01MB7881.ausprd01.prod.outlook.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
sound/firewire/motu/motu-hwdep.c

index e594765747d5b88ec8cf1d1620d4fc6c0b3b097b..38807dd7a766b403ad89a408cfaf6d59d09fb3f0 100644 (file)
@@ -75,7 +75,7 @@ static long hwdep_read(struct snd_hwdep *hwdep, char __user *buf, long count,
                while (consumed < count &&
                       snd_motu_register_dsp_message_parser_copy_event(motu, &ev)) {
                        ptr = (u32 __user *)(buf + consumed);
-                       if (put_user(ev, ptr))
+                       if (consumed + sizeof(ev) > count || put_user(ev, ptr))
                                return -EFAULT;
                        consumed += sizeof(ev);
                }