🔍 CVE-2026-23361

7.8
CVSS Score
HIGH
2026-03-25
2026-10-30 13:18
✅ 완료

🇰🇷 한글 설명

Linux 커널의 PCI DesignWare Core(dwc) 엔드포인트 드라이버에서 MSI-X 인터럽트 발생 시 발생하는 레이스 컨디션 취약점입니다. PCI 쓰기 작업이 완료되기 전에 ATU 엔트리가 언맵(unmap)되어 호스트 메모리 오염이나 IOMMU 오류를 유발할 수 있습니다.

💡 쉬운 설명

컴퓨터 부품이 데이터를 보내는 도중에 통로를 먼저 닫아버려서 데이터가 엉뚱한 곳으로 전달되는 문제입니다. 이로 인해 시스템이 멈추거나 메모리 데이터가 망가질 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: PCI: dwc: ep: Flush MSI-X write before unmapping its ATU entry Endpoint drivers use dw_pcie_ep_raise_msix_irq() to raise an MSI-X interrupt to the host using a writel(), which generates a PCI posted write transaction. There's no completion for posted writes, so the writel() may return before the PCI write completes. dw_pcie_ep_raise_msix_irq() also unmaps the outbound ATU entry used for the PCI write, so the write races with the unmap. If the PCI write loses the race with the ATU unmap, the write may corrupt host memory or cause IOMMU errors, e.g., these when running fio with a larger queue depth against 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 Flush the write by performing a readl() of the same address to ensure that the write has reached the destination before the ATU entry is unmapped. The same problem was solved for dw_pcie_ep_raise_msi_irq() in commit 8719c64e76bf ("PCI: dwc: ep: Cache MSI outbound iATU mapping"), but there it was solved by dedicating an outbound iATU only for MSI. We can't do the same for MSI-X because each vector can have a different msg_addr and the msg_addr may be changed while the vector is masked. [bhelgaas: commit log]

📍 영향받는 시스템

Linux kernel (PCI DesignWare Core endpoint driver 사용 시스템)

⚔️ 공격 벡터

특정 조건(높은 큐 깊이의 I/O 작업 등)에서 발생하는 하드웨어-소프트웨어 간의 타이밍 레이스 컨디션

🛡️ 대응 방법

PCI 쓰기 작업 완료를 보장하기 위해 MSI-X 발생 후 readl()을 수행하여 Flush를 적용한 최신 커널로 업데이트

🔧 검증 코드

출력된 커널 버전이 해당 패치가 적용된 최신 버전인지 확인합니다.

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

💻 영향받는 소프트웨어

Linux Kernel