CVE-2026-64479: ALSA: seq: Fix uninitialised heap leak in snd_seq_event_dup()

Greg Kroah-Hartman <[email protected]> Sat, 25 Jul 2026 10:51:36 +0200
Newsgroups org.kernel.vger.linux-cve-announce
Message-ID <2026072547-CVE-2026-64479-d0d2@gregkh>
From: Greg Kroah-Hartman <[email protected]>

Description
===========

In the Linux kernel, the following vulnerability has been resolved:

ALSA: seq: Fix uninitialised heap leak in snd_seq_event_dup()

snd_seq_event_dup() copies an incoming event into a pool cell and, in
the UMP-enabled build, clears the trailing cell->ump.raw.extra word that
the memcpy() did not cover.  The guard deciding whether to clear it
compares the copied size against sizeof(cell->event):

	memcpy(&cell->ump, event, size);
	if (size < sizeof(cell->event))
		cell->ump.raw.extra = 0;

For a legacy (non-UMP) event, size == sizeof(struct snd_seq_event) ==
sizeof(cell->event), so the condition is false and the extra word keeps
stale data.  The cell pool is allocated with kvmalloc() (not zeroed) and
cells are reused via a free list, so that word holds uninitialised heap
or leftover event data.

When such a cell is delivered to a UMP client (client->midi_version > 0)
that set SNDRV_SEQ_FILTER_NO_CONVERT -- so the legacy event reaches it
unconverted -- snd_seq_read() reads it out as the larger struct
snd_seq_ump_event and copies the stale word to user space, a 4-byte
kernel heap infoleak to an unprivileged /dev/snd/seq client.

Compare against sizeof(cell->ump) instead, so the trailing word is zeroed
for every event shorter than the UMP cell.

The Linux kernel CVE team has assigned CVE-2026-64479 to this issue.


Affected and fixed versions
===========================

	Issue introduced in 6.5 with commit 46397622a3fa8372b8fda0f04b33d16923b03b1b and fixed in 6.6.145 with commit ea672a9f6cc38f06fe69dd2c257ef8a3d4db179a
	Issue introduced in 6.5 with commit 46397622a3fa8372b8fda0f04b33d16923b03b1b and fixed in 6.12.96 with commit fb1aa5082847b98f44f9c6272aee9d0dca9244f0
	Issue introduced in 6.5 with commit 46397622a3fa8372b8fda0f04b33d16923b03b1b and fixed in 6.18.39 with commit 651ba82fe2a144bc7356d940bfd235c3810b0549
	Issue introduced in 6.5 with commit 46397622a3fa8372b8fda0f04b33d16923b03b1b and fixed in 7.1.4 with commit 6ded42615fa1f4949925afd0a8a9e1ab3bf96202
	Issue introduced in 6.5 with commit 46397622a3fa8372b8fda0f04b33d16923b03b1b and fixed in 7.2-rc1 with commit 435990e25bf1f4af3e6df12a6fbfd1f7ba4a97d4

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2026-64479
will be updated if fixes are backported, please check that for the most
up to date information about this issue.


Affected files
==============

The file(s) affected by this issue are:
	sound/core/seq/seq_memory.c


Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/d7649aa11089a93ea2285c210397aa67e5800766
	https://git.kernel.org/stable/c/a224c84e5d3d35708c082c84ad12d81d90762195
	https://git.kernel.org/stable/c/ea672a9f6cc38f06fe69dd2c257ef8a3d4db179a
	https://git.kernel.org/stable/c/fb1aa5082847b98f44f9c6272aee9d0dca9244f0
	https://git.kernel.org/stable/c/651ba82fe2a144bc7356d940bfd235c3810b0549
	https://git.kernel.org/stable/c/6ded42615fa1f4949925afd0a8a9e1ab3bf96202
	https://git.kernel.org/stable/c/435990e25bf1f4af3e6df12a6fbfd1f7ba4a97d4