🇰🇷 한글 설명
Linux 커널의 tegra241-cmdqv IOMMU 드라이버에서 VINTF를 해제하기 전에 인터럽트(IRQ)를 먼저 해제하지 않아 발생하는 취약점입니다. VINTF 해제 과정 중에 오류 인터럽트가 발생하면 이미 해제된 메모리 포인터를 참조하여 NULL 포인터 역참조 또는 Use-After-Free 오류가 발생할 수 있습니다.
💡 쉬운 설명
장치를 끌 때 정리 순서가 잘못되어, 이미 없어진 정보를 컴퓨터가 다시 읽으려다 오류가 발생하는 문제입니다. 이로 인해 시스템이 갑자기 멈추거나 예상치 못한 동작을 할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
iommu/tegra241-cmdqv: Free the error IRQ before tearing down VINTFs
tegra241_cmdqv_remove() tears each VINTF down first, then calls free_irq().
Tearing a VINTF down frees vintf0 and clears cmdqv->vintfs[0]. An error in
that window makes tegra241_cmdqv_isr() read the stale slot and hand it to
tegra241_vintf0_handle_error(), which dereferences a NULL or freed pointer.
Free the IRQ before tearing the VINTFs down. free_irq() waits for in-flight
handlers to finish and blocks new ones, so no ISR can observe a VINTF as it
is torn down.
Note: a user-owned VINTF (viommu) could outlive this teardown, which unmaps
cmdqv->base and frees cmdqv->vintfs, so a later viommu close then touches
freed memory. This is neither introduced nor fixed here: a physical IOMMU
is not a pluggable device, so iommufd by design holds no reference on the
one behind a viommu, and this teardown is not expected while that viommu is
still alive.
📍 영향받는 시스템
Linux kernel (tegra241-cmdqv driver component)
⚔️ 공격 벡터
하드웨어 인터럽트 발생 시점을 이용한 Race Condition 유도
🛡️ 대응 방법
커널 패치를 적용하여 VINTF 해제 전 free_irq()를 호출하도록 수정된 버전을 사용하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전인지 배포처의 보안 공지를 통해 확인하십시오.