В ядре Linux устранена следующая уязвимость:
iommu/sva: установите handle->dev до того, как будет виден дескриптор SVA.
iommu_attach_device_pasid() устанавливает новый дескриптор подключения SVA в
групповой поиск PASID до возврата iommu_sva_bind_device(). Параллельный
Таким образом, связывание может найти и повторно использовать один и тот же дескриптор после того, как iommu_sva_lock будет установлен.
упал.
handle->dev был инициализирован после удаления iommu_sva_lock. Это оставляет
окно, в котором гоночная привязка может вернуть дескриптор, указатель разработчика которого все еще находится
НУЛЬ.
Последующий вызов iommu_sva_unbind_device() может затем разыменовать его через
handle->dev->iommu_group. Инициализируйте handle->dev перед освобождением iommu_sva_lock, чтобы все видимые SVA
дескриптор полностью инициализирован.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: iommu/sva: Set handle->dev before the SVA handle is visible iommu_attach_device_pasid() installs the new SVA attach handle in the group PASID lookup before iommu_sva_bind_device() returns. A concurrent bind can therefore find and reuse the same handle after iommu_sva_lock is dropped. handle->dev was initialized after dropping iommu_sva_lock. This leaves a window where a racing bind can return a handle whose dev pointer is still NULL. A subsequent iommu_sva_unbind_device() can then dereference it via handle->dev->iommu_group. Initialize handle->dev before releasing iommu_sva_lock so any visible SVA handle is fully initialized.