🇰🇷 한글 설명
Linux 커널의 AMD IOMMU에서 iommu.strict=1 설정 시 wait_on_sem() 함수가 스핀락 내에서 바쁜 대기를 수행하면서 인터럽트 비활성화 상태로 소프트 락업을 유발합니다. 패치는 wait_on_sem()을 스핀락 밖으로 이동하여 락 경합을 감소시키고 인터럽트 비활성화 시간을 단축합니다.
💡 쉬운 설명
Linux 커널의 메모리 장치 관리 코드에서 과도한 락으로 인해 시스템이 응답 불가 상태에 빠질 수 있습니다. 이를 더 효율적으로 재배치하여 시스템 안정성을 개선합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
iommu/amd: move wait_on_sem() out of spinlock
With iommu.strict=1, the existing completion wait path can cause soft
lockups under stressed environment, as wait_on_sem() busy-waits under the
spinlock with interrupts disabled.
Move the completion wait in iommu_completion_wait() out of the spinlock.
wait_on_sem() only polls the hardware-updated cmd_sem and does not require
iommu->lock, so holding the lock during the busy wait unnecessarily
increases contention and extends the time with interrupts disabled.
📍 영향받는 시스템
Linux kernel with iommu.strict=1 on AMD IOMMU systems (모든 패치 이전 버전)
⚔️ 공격 벡터
하드웨어 가상화 환경에서 I/O 메모리 관리 장치 작업을 집중적으로 수행하여 소프트 락업 유발
🛡️ 대응 방법
Linux 커널을 최신 버전으로 업데이트하여 AMD IOMMU spinlock 개선 패치 적용
🔧 검증 코드
iommu.strict=1이 활성화되어 있으면 영향을 받을 수 있으므로 커널 버전 업데이트 필요
grep -q 'iommu.strict=1' /proc/cmdline && echo 'Vulnerable' || echo 'Check kernel version'