CVE-2026-80828 in Linux
Zusammenfassung
von VulDB • 04.09.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
ALSA: usb-audio: Vollständige Bereinigung nach Fehlern beim System-Resume (Wiederherstellung aus dem Ruhezustand)
Ein fehlgeschlagenes System-Resume kann dazu führen, dass die Soundkarte bis zum Neustart unbenutzbar bleibt. usb_audio_resume() springt zu err_out, wenn snd_usb_pcm_resume() oder snd_usb_mixer_resume() fehlschlägt. Der Fehlerpfad überspringt den out:-Block, der D0 wiederherstellt und chip->num_suspended_intf dekrementiert.
Die Karte verbleibt im Zustand SNDRV_CTL_POWER_D3hot, sodass spätere Steuerzugriffe in snd_power_ref_and_wait() blockieren. Das USB-Subsystem protokolliert einen Fehler beim Interface-Resume-Callback. Es wird kein erneuter Versuch unternommen, diesen Callback aufzurufen, sodass ein späterer Callback die übersprungene Bereinigung nicht abschließen kann.
usb_audio_suspend() inkrementiert num_suspended_intf vor der Rückgabe des Erfolgsstatus. Ein System-Resume-Callback muss den Zähler für das System-Suspend (Ruhezustand) verbrauchen, auch wenn das Resume einer Komponente fehlschlägt. Andernfalls verfälscht der hängengebliebene Zähler spätere Suspend- und Resume-Zyklen.
Wenden Sie diese Bereinigung nicht auf Fehler beim Runtime-Resume an. Das Runtime Power Management (PM) kann -EAGAIN oder -EBUSY ohne einen weiteren Suspend-Callback wiederholen. Der Zähler muss weiterhin das gesperrte Interface beschreiben. Andere Runtime-Resume-Fehler setzen runtime_error im PM-Core und führen nicht zu einem sofortigen erneuten Aufruf des Callbacks.
Beide Teile des System-Resumefehlerpfads sind seit Langem vorhanden. Das Commit 88a8516a2128a ("ALSA: usbaudio: implement USB autosuspend") führte err_out nach der D0-Wiederherstellung ein. Das Commit 862b2509d157c ("ALSA: usb-audio: Fix inconsistent card PM state after resume") verschob später num_suspended_intf-- in den out:-Block. Der Fehlerpfad überspringt nun beide Operationen.
Es wird kein Code von Drittanbietern benötigt, um den Fehlerpfad zu erreichen. snd_usb_mixer_resume() endet in snd_usb_mixer_activate(), das für Geräte mit einem Mixer-Status-URB das Ergebnis von usb_submit_urb() zurückgibt. Sein mixer->private_resume-Hook kann ebenfalls über scarlett2_init_notify() fehlschlagen. snd_usb_pcm_resume() sendet eine SET_CUR-Anforderung an eine UAC3-Stromdomäne. Sie kann -EPIPE oder -EIO zurückgeben, wenn das Gerät die Anforderung blockiert (stalls).
Leiten Sie einen Komponentenfehler nur dann durch out:, wenn system_suspend ungleich Null ist. Geben Sie Runtime-Resume-Fehler weiterhin über err_out zurück. Spätere Stufen des Komponentenresumes bleiben übersprungen. Der ursprüngliche Fehler erreicht weiterhin das USB-Subsystem. Ein späterer Transfer kann fehlschlagen, wenn sich das Gerät nicht erholt hat.
Ich habe den System-Resumefehler auf einem Audient iD14 MkI mit einem außerhalb des Baums liegenden (out-of-tree) diagnostischen Mixer-Resume-Hook reproduziert. Eine injizierte -EIO-Fehlermeldung im ungepatchten Kern ließ Steuerleser in unterbrechbaren Schlafzustand in snd_power_ref_and_wait() verfallen, bis ein Neustart erfolgte. Mit diesem Patch wurde der gleiche Fehler behoben und der Steuerzugriff wiederhergestellt. Ein zweites System-Suspend und -Resume war ebenfalls erfolgreich, nachdem ich die Fehlerinjektion deaktiviert hatte.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.