Cloudanix VulnDB

CVE-2026-68202

None

CVSS

—

EPSS

0.2%

Published

Aug 10, 2026

CISA due date

—

Cloudanix analysis

Monitor only SSVC: Track

A bug in the Linux sound system can let an ordinary user crash the whole computer or possibly take it over.

Exploitation
Local Privilege
Attacker needs
Local User
Complexity
Moderate
Impact
Full Compromise
Component
OS kernel
Class
Use After Free
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

Use-after-free in ALSA sequencer queue timer: a borrower can re-open a timer after queue_delete closes it but before snd_seq_timer_delete frees the structure, leaving a live snd_timer_instance with callback_data pointing at freed memory; a subsequent non-owner START triggers snd_seq_timer_interrupt dereferencing the freed queue.

Why it matters to the business

Unprivileged local users can trigger kernel crashes or potential code execution on any Linux system exposing /dev/snd/seq, leading to denial of service or full host compromise without special capabilities.

How an attack unfolds

An attacker opens /dev/snd/seq, issues SET_QUEUE_CLIENT to obtain a use_lock reference, waits for the race window during queue deletion, re-opens the timer via snd_seq_timer_open, then issues START on the unlocked queue; the next timer tick calls snd_seq_timer_interrupt on the dangling freed queue object.

How to fix it

Apply the upstream fix that closes any lingering timer instance in the queue destructor before clearing q->timer; upgrade to a kernel containing the resolution for CVE-2026-68202.

How to confirm the fix worked

Confirm the kernel source contains the destructor close before clearing q->timer and that snd_seq_timer_delete no longer frees a live instance; test by exercising SET_QUEUE_CLIENT + queue deletion + START sequences under concurrency.

Typical attack path

  1. Obtain access to /dev/snd/seq
  2. Create or attach to a sequencer queue and hold a use_lock reference
  3. Trigger or wait for queue_delete path that clears timeri
  4. Re-issue timer open while the window is open
  5. Issue START on the queue without ownership
  6. Wait for the next timer tick to dereference freed memory

How to detect it

Review kernel logs for ALSA sequencer oops or use-after-free warnings involving snd_seq_timer_interrupt or snd_seq_check_queue; correlate with processes opening /dev/snd/seq and issuing ioctl sequences that manipulate queues and timers.

What your security team should do

  • Patch kernels to the fixed version as soon as available
  • Restrict unprivileged access to /dev/snd/seq via device ACLs or SELinux/AppArmor policies
  • Monitor for local privilege-escalation attempts targeting ALSA sequencer
  • Include this class of sequencer timer races in future kernel fuzzing campaigns

The record

In the Linux kernel, the following vulnerability has been resolved: ALSA: seq: close a re-opened queue timer in the destructor queue_delete() closes the queue timer, then frees it. snd_seq_timer_close() clears q->timer->timeri. snd_use_lock_sync() then drains borrowers, and snd_seq_timer_delete() frees q->timer. A borrower can re-open the timer inside that window. A SET_QUEUE_CLIENT that took a queueptr() use_lock reference before the queue was unlinked runs snd_seq_timer_open() after the close. Open refuses re-open only while timeri is set, and the close just cleared it, so it re-opens timeri. snd_seq_timer_delete() does not close that instance. Its snd_seq_timer_stop() is a no-op, because running was cleared first. So it frees q->timer with the instance still live. The queue is freed next. The instance stays on the global timer with callback_data pointing at the freed queue. A non-owner START on the unlocked queue arms it. The next tick derefs the freed queue in snd_seq_timer_interrupt(). Reachable by an unprivileged user with access to /dev/snd/seq. No CAP and no queue ownership required. Close any lingering instance in the destructor. There, ->timeri can no longer change: the queue is unlinked and all use_lock borrowers have drained, so no snd_seq_queue_use() can re-open it. Close it before clearing q->timer. snd_timer_close() waits for any in-flight snd_seq_timer_interrupt() to finish, and that callback still reads q->timer (via snd_seq_check_queue()), so q->timer must stay valid until it drains.

Affected packages

Ecosystem Package Introduced Fixed