CVE-2026-74261: ALSA: seq: avoid stale FIFO cells during resize
In the Linux kernel, the following vulnerability has been resolved:
ALSA: seq: avoid stale FIFO cells during resize
sndseqfiforesize() still needs to publish the replacement pool before it waits for FIFO users. A blocking sndseqread() holds f->uselock while it sleeps, so concurrent senders must be able to queue to the new pool and wake that reader instead of failing against a closing old pool.
However, sndseqfifoeventin() duplicates an event before it takes f->lock, and sndseqread() can dequeue a cell and later call sndseqfifocellputback() if copytouser() or sndseqexpandvarevent() fails. If resize swaps f->pool and detaches oldhead in between, either path can relink an old-pool cell after the snapshot. That stale cell sits outside the drained oldhead list, keeps oldpool->counter elevated, and can leave sndseqpooldelete() waiting for the retired pool to drain.
Keep the existing swap-before-wait ordering in sndseqfiforesize(), but reject stale cells before any FIFO relink. Revalidate event-in cells under f->lock and retry them against the published replacement pool, and free stale putback cells instead of linking them back into the FIFO.
The buggy scenario involves two paths, with each column showing the order within that path:
resize path: relink path: 1. Allocate newpool. 1. Take f->uselock. 2. Swap f->pool to newpool and 2. Duplicate or dequeue an old-pool detach oldhead. cell before oldpool closes. 3. Mark oldpool closing and 3. Reach a later relink point after wait for FIFO users. resize published newpool. 4. Free oldhead and delete 4. Relink the old-pool cell after oldpool. resize detached oldhead. 5. Drop f->uselock.
The reproducer reports a resize ioctl blocked in the expected pool teardown path:
signal: resize iteration=98 targetpool=4 exceeded 250ms (elapsed=251ms) diagnostic: resizetid=651 wchan=sndseqpooldone diagnostic: resizetid=651 stack= sndseqpooldone+0x5b/0x140 sndseqpooldelete+0x7a/0x90 sndseqfiforesize+0x193/0x1e0 sndseqioctlsetclientpool+0x214/0x260 sndseqioctl+0x119/0x540 x64sysioctl+0xd1/0x120 dosyscall64+0xbb/0x2f0 entrySYSCALL64afterhwframe+0x77/0x7f
A second run with larger pools hit the same target path:
signal: resize iteration=32 targetpool=64 exceeded 250ms (elapsed=251ms) diagnostic: resizetid=663 wchan=sndseqpooldone diagnostic: resizetid=663 stack= sndseqpooldone+0x5b/0x140 sndseqpooldelete+0x7a/0x90 sndseqfiforesize+0x193/0x1e0 sndseqioctlsetclientpool+0x214/0x260 sndseqioctl+0x119/0x540 x64sysioctl+0xd1/0x120 dosyscall64+0xbb/0x2f0 entrySYSCALL64afterhwframe+0x77/0x7f
Affected Software
Event History
Frequently Asked Questions
What is the severity of CVE-2026-74261?
The severity of CVE-2026-74261 is rated at risk level 23.
How do I fix CVE-2026-74261?
To fix CVE-2026-74261, update your Linux Kernel to a version that contains the resolution for this vulnerability.
What systems are affected by CVE-2026-74261?
CVE-2026-74261 affects systems utilizing the ALSA sequencer within the Linux Kernel.
What is the impact of CVE-2026-74261?
CVE-2026-74261 could lead to stale FIFO cell issues during resizing, potentially disrupting the ALSA sequencer operations.
When was CVE-2026-74261 published?
CVE-2026-74261 was published on August 15, 2026.