CVE-2026-80895 in Linux
요약
\~에 의해 VulDB • 2026. 09. 04.
리눅스 커널에서 다음 취약점이 해결되었습니다:
mshv: irqfd 어설션 경로에 대한 pt_vp_array 게시 순서 보장
mshv_partition_ioctl_create_vp()는 VP 구조체(할당, mutex_init, init_waitqueue_head, 페이지 매핑)를 초기화한 후 포인터를 partition->pt_vp_array에 게시합니다. 여러 ISR 경로는 이 배열을 잠금 없이 읽습니다: 인터셉트 ISR, 두 개의 스케줄러 ISRs, 그리고 irqfd 빠른 경로에서 mshv_try_assert_irq_fast()입니다.
이중 mshv_try_assert_irq_fast()만이 구조적으로 경쟁 조건(race)을 유발할 수 있습니다. 이는 pt_mutex를 보유하지 않은 eventfd waker에서 실행되며, MSHV_IRQFD는 등록 시 대상 lapic_apic_id(== vp_index)가 기존 VP를 참조해야 할 필요가 없습니다. 따라서 사용자는 아직 생성되지 않은 VP를 대상으로 irqfd를 등록한 후, 동일한 인덱스에 대한 MSHV_CREATE_VP와 동시에 mshv_try_assert_irq_fast()를 트리거할 수 있습니다. 약하게 정렬된(weakly-ordered) 아키텍처에서는 판독기가 초기화 저장 연산이 VP 구조체에 대해 가시화되기 전에 pt_vp_array에서 NULL이 아닌 포인터를 관찰하여, 부분적으로 초기화된 필드(vp_register_page 등)의 사용으로 이어질 수 있습니다.
다른 ISR 판독기는 이 경쟁 조건에 도달할 수 없습니다: 하이퍼바이저는 실행하도록 지워지지 않은 VP에 대해 인터셉트 또는 스케줄러 메시지를 생성하지 않으며, 사용자는 MSHV_CREATE_VP가 반환한 VP fd에서만 MSHV_RUN_VP를 호출할 수 있는데, 이는 구조상 게시 후에 반환됩니다. 이러한 판독기는 단순 로드(plain loads)로 남겨둡니다.
mshv_partition_ioctl_create_vp()에서 smp_store_release()를 사용하여 포인터를 게시하고, mshv_try_assert_irq_fast()에서 smp_load_acquire()와 쌍을 맞춥니다. x86에서는 TSO 하에서 이는 단순 접근으로 컴파일되며, ARM64에서는 빠른 경로에 적합한 1개 명령어 acquire/release 장벽을 생성합니다.
destroy-side 경로(destroy_partition()이 kfree(vp) 후 pt_vp_array[i]를 NULL로 지움)에는 여기서 범위를 벗어난 별도의 순서 및 수명 관련 문제가 있습니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.