Vulnerabilidad en Linux (CVE-2026-23361)
Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
25/03/2026
Última modificación:
25/03/2026
Descripción
En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:<br />
<br />
PCI: dwc: ep: Vaciar escritura MSI-X antes de desmapear su entrada ATU<br />
<br />
Los controladores de punto final usan dw_pcie_ep_raise_msix_irq() para generar una interrupción MSI-X al host usando un writel(), lo que genera una transacción de escritura publicada PCI. No hay finalización para las escrituras publicadas, por lo que el writel() puede regresar antes de que la escritura PCI se complete. dw_pcie_ep_raise_msix_irq() también desmapea la entrada ATU de salida usada para la escritura PCI, por lo que la escritura compite con el desmapeo.<br />
<br />
Si la escritura PCI pierde la carrera con el desmapeo ATU, la escritura puede corromper la memoria del host o causar errores de IOMMU, por ejemplo, estos al ejecutar fio con una profundidad de cola mayor contra nvmet-pci-epf:<br />
<br />
arm-smmu-v3 fc900000.iommu: 0x0000010000000010<br />
arm-smmu-v3 fc900000.iommu: 0x0000020000000000<br />
arm-smmu-v3 fc900000.iommu: 0x000000090000f040<br />
arm-smmu-v3 fc900000.iommu: 0x0000000000000000<br />
arm-smmu-v3 fc900000.iommu: event: F_TRANSLATION cliente: 0000:01:00.0 sid: 0x100 ssid: 0x0 iova: 0x90000f040 ipa: 0x0<br />
arm-smmu-v3 fc900000.iommu: unpriv data write s1 &#39;Input address caused fault&#39; stag: 0x0<br />
<br />
Vaciar la escritura realizando un readl() de la misma dirección para asegurar que la escritura ha alcanzado el destino antes de que la entrada ATU sea desmapeada.<br />
<br />
El mismo problema fue resuelto para dw_pcie_ep_raise_msi_irq() en el commit 8719c64e76bf (&#39;PCI: dwc: ep: Cacheo de mapeo iATU de salida MSI&#39;), pero allí fue resuelto dedicando un iATU de salida solo para MSI. No podemos hacer lo mismo para MSI-X porque cada vector puede tener una msg_addr diferente y la msg_addr puede ser cambiada mientras el vector está enmascarado.<br />
<br />
[bhelgaas: registro de commit]



