🇰🇷 한글 설명
Linux 커널의 vfio/pci 드라이버에서 DisINTx를 지원하지 않는 디바이스의 INTx IRQ 처리 중 발생하는 경합 조건을 수정합니다. request_irq()와 disable 사이에서 interrupt가 발생하면 disable depth가 중복으로 증가하여 복구 불가능한 상태가 되는 문제를 IRQF_NO_AUTOEN으로 자동 활성화를 방지하는 방식으로 해결합니다.
💡 쉬운 설명
리눅스 커널이 특정 디바이스의 인터럽트를 처리할 때 타이밍 문제로 인해 인터럽트가 이중으로 비활성화될 수 있는 오류가 있습니다. 처음부터 자동 활성화하지 않고 필요할 때만 활성화하도록 방식을 변경하여 문제를 해결합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
vfio/pci: Disable auto-enable of exclusive INTx IRQ
Currently for devices requiring masking at the irqchip for INTx, ie.
devices without DisINTx support, the IRQ is enabled in request_irq()
and subsequently disabled as necessary to align with the masked status
flag. This presents a window where the interrupt could fire between
these events, resulting in the IRQ incrementing the disable depth twice.
This would be unrecoverable for a user since the masked flag prevents
nested enables through vfio.
Instead, invert the logic using IRQF_NO_AUTOEN such that exclusive INTx
is never auto-enabled, then unmask as required.
📍 영향받는 시스템
Linux 커널 (특히 VFIO/PCI 드라이버를 사용하는 가상화 환경과 DisINTx 미지원 디바이스)
⚔️ 공격 벡터
로컬 인터럽트 처리의 경합 조건을 통한 IRQ 서브시스템 오작동
🛡️ 대응 방법
Linux 커널을 CVE-2024-27437 패치가 포함된 버전 이상으로 업그레이드
🔧 검증 코드
IRQF_NO_AUTOEN이 vfio 드라이버에서 사용되면 패치 적용된 상태이며, 결과가 없으면 취약한 커널 버전입니다.
grep -r 'IRQF_NO_AUTOEN' /usr/src/linux*/drivers/vfio/ 2>/dev/null | head -1