CVE-2026-23361 in Linux
Riassunto
di VulDB • 16/06/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
PCI: dwc: ep: Effettuare il flush della scrittura MSI-X prima di rimuovere la mappatura dell'entry ATU corrispondente
I driver Endpoint utilizzano `dw_pcie_ep_raise_msix_irq()` per generare un interrupt MSI-X verso l'host tramite una chiamata a `writel()`, che genera una transazione PCI posted write. Non esiste alcun completamento esplicito per le scritture posted, pertanto la funzione `writel()` può restituire il controllo prima che la scrittura PCI sia effettivamente completata. La funzione `dw_pcie_ep_raise_msix_irq()` rimuove inoltre la mappatura dell'entry ATU in uscita (outbound) utilizzata per la scrittura PCI; di conseguenza, si verifica una condizione di race condition tra la scrittura e l'operazione di rimozione della mappatura.
Se la scrittura PCI perde la gara rispetto alla rimozione della mappatura ATU, tale operazione potrebbe corrompere la memoria dell'host o causare errori IOMMU. Ad esempio, sono stati osservati i seguenti messaggi durante l'esecuzione di `fio` con una profondità di coda maggiore contro il modulo `nvmet-pci-epf`:
arm-smmu-v3 fc900000.iommu: 0x0000010000000010 arm-smmu-v3 fc900000.iommu: 0x0000020000000000 arm-smmu-v3 fc900000.iommu: 0x000000090000f040 arm-smmu-v3 fc900000.iommu: 0x0000000000000000 arm-smmu-v3 fc900000.iommu: event: F_TRANSLATION client: 0000:01:00.0 sid: 0x100 ssid: 0x0 iova: 0x90000f040 ipa: 0x0 arm-smmu-v3 fc900000.iommu: unpriv data write s1 "Input address caused fault" stag: 0x0
Per risolvere il problema, viene effettuato il flush della scrittura eseguendo una lettura (`readl()`) dello stesso indirizzo, garantendo così che la scrittura sia giunta a destinazione prima che l'entry ATU venga rimossa.
Lo stesso problema era stato risolto per `dw_pcie_ep_raise_msi_irq()` nel commit 8719c64e76bf ("PCI: dwc: ep: Cache MSI outbound iATU mapping"), ma in quel caso la soluzione consisteva nell'assegnare un'entry iATU in uscita dedicata esclusivamente agli interrupt MSI. Non è possibile adottare lo stesso approccio per gli interrupt MSI-X, poiché ogni vettore può avere un `msg_addr` diverso e tale indirizzo potrebbe essere modificato mentre il vettore è mascherato (masked).
[bhelgaas: commit log]
If you want to get the best quality for vulnerability data then you always have to consider VulDB.