🔍 CVE-2026-97478

7.8
CVSS Score
HIGH
2026-09-24
2026-10-30 13:21
✅ 완료

🇰🇷 한글 설명

Linux 커널의 virt:acrn 구성 요소에서 eventfd 종료 시 irqfd의 Use-After-Free 취약점이 발견되었습니다. acrn_irqfd_deassign() 함수와 eventfd의 EPOLLHUP 깨우기 동작이 경합을 일으켜 동일한 hsm_irqfd 구조체를 중복 해제할 수 있습니다.

💡 쉬운 설명

컴퓨터 시스템 내부에서 특정 작업이 끝나기도 전에 메모리 공간을 먼저 지워버려 발생하는 오류입니다. 이로 인해 시스템이 갑자기 멈추거나 보안상 위험한 상태가 될 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: virt: acrn: Fix irqfd use-after-free during eventfd shutdown acrn_irqfd_deassign() and the eventfd EPOLLHUP wakeup can race and free the same struct hsm_irqfd: CPU0 CPU1 ---- ---- eventfd_release() wake_up_poll(EPOLLHUP) hsm_irqfd_wakeup() queue_work(&irqfd->shutdown) acrn_irqfd_deassign() hsm_irqfd_shutdown() list_del_init() eventfd_ctx_remove_wait_queue() eventfd_ctx_put() kfree(irqfd) hsm_irqfd_shutdown_work() container_of(work, ..., shutdown) irqfd->vm <-- use-after-free The deassign path freed the irqfd while a shutdown work item was already queued by EPOLLHUP (or vice versa), so the work item could resurrect a dangling pointer through container_of(). Switch to the lifetime model used by KVM irqfds: - Deassign/deinit only deactivate the irqfd: remove it from vm->irqfds under irqfds_lock and queue the cleanup work. - hsm_irqfd_shutdown_work() becomes the sole owner that unhooks the eventfd waitqueue entry, drops the eventfd reference and frees the irqfd. - A new HSM_IRQFD_FLAG_SHUTDOWN bit guarded by test_and_set_bit() ensures the cleanup work is queued at most once, no matter how many of {EPOLLHUP, deassign, deinit} fire concurrently. This is safe to call from the waitqueue callback, which runs with wqh->lock held and IRQs disabled and therefore cannot take irqfds_lock. - acrn_irqfd_deassign() flushes vm->irqfd_wq before returning so the eventfd is fully detached on return. acrn_irqfd_deinit() deactivates every irqfd, flushes the workqueue and only then destroys it, so no path can queue_work() onto a torn-down workqueue. - acrn_irqfd_assign() now installs the eventfd waitqueue entry and publishes the irqfd to vm->irqfds under irqfds_lock, so the irqfd is never visible to deassign/deinit before its waitqueue entry is in place, and any EPOLLHUP that fires in the assign window queues cleanup work that blocks on irqfds_lock until publication is done.

📍 영향받는 시스템

Linux kernel (virt:acrn module 사용 환경)

⚔️ 공격 벡터

특정 이벤트(EPOLLHUP)와 자원 해제(deassign) 동작을 동시에 유도하여 메모리 경합을 일으킴

🛡️ 대응 방법

Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 irqfd 생명주기 관리 로직을 수정해야 함

🔧 검증 코드

출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이상인지 확인합니다.

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