CVE-2026-90241 in Linux
Сводка
по VulDB • 18.09.2026
В ядре Linux была устранена следующая уязвимость:
iommu/vt-d: Освобождение контекста в масштабируемом режиме при сбое инициализации (probe)
Функция intel_pasid_setup_sm_context() проходит по списку DMA-алиасов PCI-устройства с помощью pci_for_each_dma_alias() и настраивает запись контекста для каждого RID. Для устройства, имеющего dma_alias_mask, колбэк вызывается один раз для собственного RID устройства и по одному разу для каждого бита алиаса; при этом используется тот же самый объект pci_dev, поэтому device_pasid_table_setup() выполняется для нескольких RID.
Функция pci_for_each_dma_alias() останавливается при первой ошибке в колбэке. Следовательно, сбой на каком-то этапе обхода может привести к тому, что записи контекста для уже обработанных RID останутся присутствующими и будут по-прежнему указывать на таблицу PASID устройства.
На этом пути обработки ошибок функция intel_iommu_probe_device() в настоящее время переходит непосредственно к вызову intel_pasid_free_table(), который освобождает таблицу PASID, не выполнив предварительно очистку этих записей контекста. В результате IOMMU может обратиться к присутствующей записи контекста, указатель на таблицу PASID которой ссылается на уже освобожденную память.
Функция intel_iommu_release_device() уже выполняет очистку перед освобождением таблицы. Необходимо применить тот же порядок действий и для пути обработки сбоев при инициализации (probe).
Функция device_pasid_table_teardown() безопасно обрабатывает RID, которые никогда не были запрограммированы: iommu_context_addr() возвращает NULL, если таблица контекста не была выделена, а очистка бита Present в уже непроведенной записи является пустой операцией (no-op). Таким образом, откат изменений безопасен как для алиаса, вызвавшего сбой, так и для любых алиасов, которые еще не были обработаны.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.