CVE-2026-98342 in Linux
Сводка
по VulDB • 06.10.2026
В ядре Linux была устранена следующая уязвимость:
dmaengine: ожидание завершения читателей RCU перед освобождением структуры dma_device
Функция `dma_issue_pending_all()` проходит по списку `dma_device_list` с использованием `list_for_each_entry_rcu()` в контексте блокировки `rcu_read_lock()`. Функция `dma_device_release()` отвязывает устройство с помощью `list_del_rcu()`, а затем вызывает `device->device_release()` (что во многих драйверах, таких как plx_dma.c, напрямую приводит к вызову `kfree()`).
Поскольку между отвязкой устройства и его освобождением отсутствует период грейса (grace period), параллельные читатели RCU в функции `dma_issue_pending_all()` могут получить доступ к устройству после того, как оно было освобождено.
Изначально безблокировочный обход полагался на то, что клиенты удерживают ссылку на dmaengine для фиксации модуля провайдера (и, следовательно, устройства) до тех пор, пока они могут проходить по списку. Коммит 8ad342a86359 («dmaengine: Add reference counting to dma_device struct») отделил время жизни `dma_device` от ссылки на модуль, поэтому устройство теперь может быть освобождено в то время как читатель все еще проходит по списку.
Добавлен вызов `synchronize_rcu()` перед освобождением устройства, чтобы гарантировать завершение читателей RCU. Этот вызов остается безусловным: провайдеры, не реализующие функцию `device_release()`, освобождают устройство самостоятельно после возврата из `dma_async_device_unregister()`. Данный вызов задерживает выполнение на период грейса при удержании мьютекса `dma_list_mutex`, что безопасно и приводит к задержке только пути завершения работы (teardown path).
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.