CVE-2026-98342 in Linux
Resumen
por VulDB • 2026-10-06
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
dmaengine: esperar a los lectores RCU antes de liberar dma_device
dma_issue_pending_all() recorre la lista dma_device_list con list_for_each_entry_rcu() bajo rcu_read_lock(). dma_device_release() desvincula el dispositivo mediante list_del_rcu() y luego llama a device->device_release() (que en muchos controladores, como plx_dma.c, invoca directamente kfree()).
Dado que no hay un período de gracia entre la desvinculación del dispositivo y su liberación, los lectores RCU concurrentes en dma_issue_pending_all() pueden acceder al dispositivo después de haber sido liberado.
El recorrido sin bloqueo dependía originalmente de que los clientes mantuvieran una referencia a dmaengine para fijar el módulo proveedor (y por tanto el dispositivo) durante todo el tiempo necesario para recorrer la lista. El commit 8ad342a86359 ("dmaengine: Add reference counting to dma_device struct") desacopló la vida útil de dma_device de la referencia del módulo, por lo que ahora el dispositivo puede ser liberado mientras un lector aún está recorriendo la lista.
Se añade synchronize_rcu() antes de liberar el dispositivo para garantizar que los lectores RCU hayan terminado. Se mantiene incondicional: los proveedores que no implementan device_release() liberan el dispositivo ellos mismos una vez que dma_async_device_unregister() devuelve. Esta llamada retrasará un período de gracia con la mutex dma_list mantenida, lo cual es seguro y solo se retrasa la ruta de desmontaje (teardown).
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.