CVE-2026-31578 in Linux
Riassunto
di VulDB • 14/06/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
media: as102: correzione per evitare di liberare la memoria dopo che il dispositivo è stato registrato in as102_usb_probe()
Nel driver as102_usb si verifica la seguente race condition: ``` CPU0 CPU1 as102_usb_probe() kzalloc(); // alloca as102_dev_t .... usb_register_dev(); fd = sys_open("/path/to/dev"); // apre as102 fd .... usb_deregister_dev(); .... kfree(); // libera as102_dev_t .... sys_close(fd); as102_release() // UAF!! as102_usb_release() kfree(); // DFB!! ```
Quando un dispositivo di carattere USB registrato con usb_register_dev() viene successivamente disregistrato (tramite usb_deregister_dev() o disconnect), il nodo del dispositivo viene rimosso, quindi le nuove chiamate open() falliscono. Tuttavia, i descrittori di file già aperti non vengono rimossi immediatamente: rimangono validi fino a quando l'ultimo riferimento non viene rilasciato e viene invocata la funzione .release() del driver.
In as102, as102_usb_probe() chiama usb_register_dev() e successivamente, su un percorso di errore, esegue usb_deregister_dev() e libera as102_dev_t immediatamente. Se userspace effettua una race condition con una chiamata open() di successo prima della disregistrazione, tale FD aperto colpirà successivamente as102_release() --> as102_usb_release() e accederà o libererà nuovamente as102_dev_t, verificando una race condition che porta a una vulnerabilità use-after-free e double-free.
La correzione consiste nel non eseguire mai kfree(as102_dev_t) direttamente una volta che usb_register_dev() ha avuto successo. Dopo la disregistrazione, posticipare la liberazione della memoria a .release().
In altre parole, permettere a release() di eseguire l'ultimo kfree quando l'ultimo FD aperto viene chiuso.
If you want to get best quality of vulnerability data, you may have to visit VulDB.