CVE-2026-90220: ALSA: seq: Don't leak the extension cell pointer in the bounce payload
In the Linux kernel, the following vulnerability has been resolved:
ALSA: seq: Don't leak the extension cell pointer in the bounce payload
The bounceerrorevent() embeds the failed event in the bounce payload by pointing data.ext.ptr at it. When that event is a queued variable-length event, its own data.ext.ptr holds the address of its first extension cell, put there by sndseqeventdup(). The payload goes out verbatim through sndseqexpandvarevent(), so the address reaches userspace.
That is the same address commit 705dd6dcbc0e ("ALSA: seq: Clear variable event pointer on read") removed from the event header. The read path still clears it there, just above the call that expands the payload.
Embed a sanitised copy instead, treated exactly as sndseqread() treats the header. A stack copy is enough because delivery is synchronous and sndseqeventdup() copies before returning.
An unprivileged client reaches this by setting SNDRVSEQFILTERBOUNCE, queueing a variable-length event to a port that does not exist and reading the bounce back. Eight bytes on 64-bit, from its own pool.
Affected Software
Event History
Frequently Asked Questions
Can an unprivileged local user trigger this issue?
Yes. An unprivileged ALSA sequencer client can reach it by enabling SNDRV_SEQ_FILTER_BOUNCE, sending a variable-length event to a port that does not exist, and reading the resulting bounce event.
What information is exposed through the bounce event?
The bounce payload can disclose the address stored in the failed event's extension-cell pointer. On 64-bit systems, the disclosure is eight bytes and comes from the client's own pool.
Is interaction with another valid sequencer port required?
No. The described trigger deliberately queues the event to a port that does not exist, causing the failed event to be returned through the bounce mechanism.