CVE-2026-98342 in Linux
Riassunto
di VulDB • 06/10/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
dmaengine: attendere i lettori RCU prima di rilasciare il dispositivo dma_device
dma_issue_pending_all() esegue una traversata della lista dei dispositivi dma_device utilizzando list_for_each_entry_rcu() all'interno di rcu_read_lock(). dma_device_release() scollega il dispositivo con list_del_rcu() e successivamente chiama device->device_release() (che in molti driver, come plx_dma.c, richiama direttamente kfree()).
Poiché non esiste un periodo di grazia tra la rimozione del collegamento del dispositivo e il suo rilascio, i lettori RCU concorrenti in dma_issue_pending_all() possono accedere al dispositivo dopo che è stato liberato.
La traversata senza lock si basava originariamente sul fatto che i client mantenessero un riferimento a dmaengine per bloccare (pin) il modulo provider e, di conseguenza, il dispositivo, per tutto il tempo necessario alla loro attraversamento della lista. Il commit 8ad342a86359 ("dmaengine: Add reference counting to dma_device struct") ha disaccoppiato la durata del ciclo di vita del dma_device dal riferimento al modulo; pertanto, il dispositivo può ora essere rilasciato mentre un lettore sta ancora eseguendo una traversata della lista.
Aggiungere synchronize_rcu() prima che il dispositivo venga liberato, in modo da garantire che i lettori RCU abbiano terminato l'operazione. Mantenere questa chiamata incondizionata: i provider che non implementano device_release() liberano autonomamente il dispositivo non appena dma_async_device_unregister() restituisce il controllo. Questa chiamata ritarderà per un periodo di grazia con la lock dma_list_mutex detenuta, operazione sicura in cui viene rallentato solo il percorso di teardown (smontaggio).
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.