From: Takashi Iwai <tiwai@suse.de>
To: Marouane El Moufid <eun0us@espilon.net>
Cc: tiwai@suse.com, clemens@ladisch.de, perex@perex.cz,
linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org,
eun0us@proton.me
Subject: Re: [PATCH] ALSA: usb-audio: fix OOB write in snd_usbmidi_novation_output()
Date: Mon, 24 Aug 2026 08:47:28 +0200 [thread overview]
Message-ID: <877blgvwu7.wl-tiwai@suse.de> (raw)
In-Reply-To: <178749334830.543645.13722252148340572274@espilon.net>
On Sun, 23 Aug 2026 15:55:48 +0200,
Marouane El Moufid wrote:
>
> snd_usbmidi_novation_output() lays out a two-byte header at
> transfer_buffer[0..1] and passes &transfer_buffer[2] together with a
> length of ep->max_transfer - 2 to snd_rawmidi_transmit():
>
> count = snd_rawmidi_transmit(ep->ports[0].substream,
> &transfer_buffer[2],
> ep->max_transfer - 2);
>
> ep->max_transfer comes from the output endpoint's wMaxPacketSize via
> usb_maxpacket(). A malformed or malicious device can advertise a bulk
> OUT endpoint with a wMaxPacketSize of 1 - the USB core only clamps this
> value downwards - so ep->max_transfer becomes 1 and the count argument
> becomes -1.
>
> snd_rawmidi_transmit() passes the negative count on to
> __snd_rawmidi_transmit_peek(), where "if (count1 > count) count1 = count"
> leaves count1 negative; get_aligned_size() keeps it negative for a
> byte-stream substream, so the following memcpy(buffer, ..., count1) runs
> with a (size_t)-1 length and writes far past the transfer buffer, which
> was allocated with usb_alloc_coherent(ep->max_transfer).
>
> This is the same class of bug that was fixed for snd_usbmidi_akai_output()
> in commit 0970274613fb ("ALSA: usb-audio: fix OOB write in
> snd_usbmidi_akai_output()"); the novation output routine was left
> unguarded. Bail out when the endpoint cannot hold the two-byte header
> plus at least one payload byte.
>
> Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> Cc: stable@vger.kernel.org
> Signed-off-by: Marouane El Moufid <eun0us@espilon.net>
Applied now. Thanks.
Takashi
prev parent reply other threads:[~2026-08-24 6:47 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-23 13:55 [PATCH] ALSA: usb-audio: fix OOB write in snd_usbmidi_novation_output() Marouane El Moufid
2026-08-24 6:47 ` Takashi Iwai [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=877blgvwu7.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=clemens@ladisch.de \
--cc=eun0us@espilon.net \
--cc=eun0us@proton.me \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.