CVE-2026-74278: ALSA: seq: Fix kernel heap address leak in bounce_error_event()
In the Linux kernel, the following vulnerability has been resolved:
ALSA: seq: Fix kernel heap address leak in bounceerrorevent()
The comment above bounceerrorevent() documents that user clients should receive SNDRVSEQEVENTBOUNCE with the original event embedded as variable-length data, while kernel clients should receive SNDRVSEQEVENTKERNELERROR with a quoted kernel pointer.
However, the implementation unconditionally uses SNDRVSEQEVENTKERNELERROR with data.quote.event set to the raw struct sndseqevent pointer for all clients. When a bounce error event is delivered to a USERCLIENT via sndseqread(), the kernel heap address in data.quote.event is exposed to userspace through copytouser() in the fixed-length branch.
This is a distinct leak path from the one addressed by commit 705dd6dcbc0e ("ALSA: seq: Clear variable event pointer on read"), which sanitizes data.ext.ptr in the variable-length branch of sndseqread(). The bounceerrorevent() leak uses fixed-length events that take the else branch where no sanitization occurs.
Differentiate the bounce event by client type. For USERCLIENT, send SNDRVSEQEVENTBOUNCE with SNDRVSEQEVENTLENGTHVARIABLE and data.ext pointing to the original event. The variable-length path in sndseqeventdup() copies the event data into chained cells, and sndseqexpandvarevent() copies only the content -- never the pointer -- to userspace. For KERNELCLIENT, keep the existing SNDRVSEQEVENTKERNELERROR behavior with the quoted pointer.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade to a fixed release to a version that resolves this vulnerability.
Patch 705dd6dcbc0e - Compensating control
Differentiate SEQ bounce error handling by client type: for KERNEL_CLIENT keep SNDRV_SEQ_EVENT_KERNEL_ERROR with data.quote.event not exposing the raw quoted kernel pointer; for USER_CLIENT ensure sanitization so data.ext.ptr and the quoted pointer behavior do not leak kernel heap addresses through snd_seq_read()’s variable-length event path.