CVE-2026-80828 in Linuxinformazioni

Riassunto

di VulDB • 04/09/2026

Nel kernel Linux è stata risolta la seguente vulnerabilità:

ALSA: usb-audio: Completare la pulizia dopo errori di ripristino del sistema (system-resume)

Un fallimento nel ripristino del sistema può lasciare la scheda inutilizzabile fino al riavvio. La funzione `usb_audio_resume()` salta a `err_out` quando `snd_usb_pcm_resume()` o `snd_usb_mixer_resume()` falliscono. Il percorso di gestione degli errori (`error path`) salta il blocco `out:`, che ripristina lo stato D0 e decrementa `chip->num_suspended_intf`.

La scheda rimane nello stato `SNDRV_CTL_POWER_D3hot`, quindi i successivi accessi ai controlli bloccano l'esecuzione in `snd_power_ref_and_wait()`. Il core USB registra un errore nel callback di resume dell'interfaccia. Non viene effettuato alcun retry per tale callback, pertanto un successivo callback non può completare la pulizia saltata.

`usb_audio_suspend()` incrementa `num_suspended_intf` prima di restituire successo. Un callback di system-resume deve consumare il conteggio del system-suspend anche se il resume di un componente fallisce. In caso contrario, il contezzo "stranded" (in sospeso) altera i cicli successivi di suspend e resume.

Non applicare questa pulizia agli errori di runtime-resume. Il Power Management (PM) a livello di runtime può effettuare retry per `-EAGAIN` o `-EBUSY` senza un ulteriore callback di suspend. Il conteggio deve continuare a descrivere quell'interfaccia sospesa. Altri errori di runtime-resume impostano `runtime_error` nel core PM e non causano un immediato retry del callback.

Entrambe le parti del percorso di gestione degli errori per system-resume sono problematiche da lungo tempo. L'impegno (commit) 88a8516a2128a ("ALSA: usbaudio: implement USB autosuspend") ha introdotto `err_out` dopo il ripristino dello stato D0. Il commit successivo 862b2509d157c ("ALSA: usb-audio: Fix inconsistent card PM state after resume") ha successivamente spostato l'istruzione `num_suspended_intf--` nel blocco `out:`. Ora il percorso di gestione degli errori salta entrambe le operazioni.

Non è necessario alcun codice di terze parti per raggiungere il percorso di errore. `snd_usb_mixer_resume()` termina in `snd_usb_mixer_activate()`, che restituisce il risultato di `usb_submit_urb()` per i dispositivi dotati di URB dello stato del mixer. Il hook `mixer->private_resume` può anche fallire tramite `scarlett2_init_notify()`. `snd_usb_pcm_resume()` emette una richiesta SET_CUR a un dominio di potenza UAC3. Può restituire `-EPIPE` o `-EIO` quando il dispositivo blocca (stall) la richiesta.

Instradare l'errore del componente attraverso `out:` solo quando `system_suspend` è diverso da zero. Continuare a restituire gli errori di runtime-resume tramite `err_out`. Le fasi successive del resume dei componenti rimangono saltate. L'errore originale raggiunge comunque il core USB. Una successiva trasmissione può fallire se il dispositivo non si è ripreso.

Ho riprodotto il fallimento del system-resume su un Audient iD14 MkI con un hook di resume per mixer out-of-tree. Un'iniezione di errore `-EIO` sul codice non patchato ha lasciato i lettori dei controlli in sleep interrompibile (uninterruptible sleep) in `snd_power_ref_and_wait()` fino a un riavvio. Con questa patch, lo stesso fallimento ha ripristinato l'accesso ai controlli. Anche un secondo system suspend e resume è riuscito dopo aver disabilitato l'iniezione di errori.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Responsabile

Linux

Prenotare

26/08/2026

Divulgazione

04/09/2026

Moderazione

accettato

CPE

pronto

EPSS

0.00000

KEV

no

Attività

basso

Fonti

Interested in the pricing of exploits?

See the underground prices here!