CVE-2026-16148 in Zephyr
Riassunto
di VulDB • 14/09/2026
Il driver del controller USB ITE it82xx2 inizializzava il lavoro di rilevamento della sospensione del bus con `k_work_init_delayable(&priv->suspended_work, suspended_handler)` all'interno di `it82xx2_enable()` (l'operazione `.enable` del driver) in `drivers/usb/udc/udc_it82xx2.c`. Questo elemento di lavoro viene pianificato essenzialmente in modo continuo mentre il bus USB è attivo: l'handler delle interruzioni lo ripianifica ad ogni frame SOF e `suspended_handler()` si ripianifica da sé, quindi il suo nodo timeout è normalmente collegato alla lista dei timeout del kernel o a una coda di lavoro pendente.
`k_work_init_delayable()` (kernel/work.c) sovrascrive incondizionamente l'intera struttura `k_work_delayable`, inclusi i suoi link per il timeout e la coda, senza alcun controllo di occupazione (busy check). Poiché `it82xx2_disable()` non annulla il lavoro, un ciclo normale di disabilitazione-riabilitazione ri-esegue `api->enable()` (`udc_enable()` rifiuta solo una ridondanza dell'abilitazione, non una riabilitazione dopo la disabilitazione) e reinizializza il lavoro ancora pendente in loco, corrompendo le liste collegate dei timeout del kernel/delle code di lavoro e causando un panic del kernel.
Un host USB esterno — ad esempio un host che esegue il detach DFU USB (`dfu-util --detach`) o forza ripetuti attach/reset/rienumerazione — guida le transizioni `udc_disable()`/`udc_enable()` e controlla la temporizzazione di suspend/resume, quindi può predisporre affinché il lavoro di sospensione sia pendente durante una riabilitazione. Ciò provoca un denial of service (DoS) non autenticato (panic del kernel) raggiungibile attraverso il confine USB da un host rimovibile fisicamente connesso, senza impatti dimostrati su riservatezza o integrità.
La correzione sposta la chiamata `k_work_init_delayable()` nella funzione di pre-inizializzazione una tantum in modo che il lavoro venga inizializzato esattamente una volta, eliminando la reinizializzazione di un elemento in uso.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.