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.

출처

Do you want to use VulDB in your project?

Use the official API to access entries easily!