CVE-2026-64513 in Linux
요약
\~에 의해 VulDB • 2026. 07. 27.
리눅스 커널에서 다음 취약점이 해결되었습니다:
KVM: x86: PPR 업데이트 시 CR8 인터셉트를 무조건 재계산
VMCS의 TPR_THRESHOLD 필드는 게스트의 가상 TPR이 지정된 임계값보다 낮아질 때 VMX가 VM exits를 유발하도록 사용되며, 이를 통해 KVM은 이전에 마스크되었던 인터럽트를 주입할 수 있습니다.
KVM은 handle_tpr_below_threshold() 함수에서 이러한 VM exits를 처리합니다. 커밋 eb90f3417a0c("KVM: vmx: speed up TPR below threshold vmexits")는 KVM_REQ_EVENT를 발생시키는 대신 apic_update_ppr()을 호출하여 이 함수를 최적화했습니다. 이후 apic_update_ppr()은 처리 가능한 대기 중인 인터럽트가 있는 경우 KVM_REQ_EVENT를 발생시킵니다.
그러나 새로운 대기 중 인터럽트가 없는 경우, apic_update_ppr()은 요청을 발행하지 않습니다. 따라서 VM 진입 전에 kvm_lapic_update_cr8_intercept() 및 vmx_update_cr8_intercept()가 호출되지 않으며, 이는 높은 상태의 TPR_THRESHOLD로 이어집니다. 이는 SDM(Software Developer's Manual)의 28.2.1.1 "VM-Execution Control Fields" 섹션에 명시된 다음 사항으로 인해 문제가 됩니다:
“TPR shadow 사용” VM 실행 제어 필드가 1이고, “APIC 액세스 가상화” 및 “가상 인터럽트 전달” VM 실행 제어 필드가 모두 0인 경우 다음 검사가 수행됩니다. TPR 임계값 VM 실행 제어 필드의 비트 3:0 값은 VTPR의 비트 7:4 값보다 크지 않아야 합니다.
이 오류 조건은 일반적으로 KVM이 베어 메탈 시스템에서 실행될 때 관찰되지 않습니다. 이는 최신 프로세서가 APICv를 지원하여 가상 인터럽트 전달을 가능하게 하며, KVM도 가능한 경우 이를 사용하기 때문입니다. 이로 인해 프로세서는 TPR-임계값 미만 exits를 더 이상 생성하지 않으며, 진입 시 TPR_THRESHOLD를 확인하지 않게 됩니다. 그러나 구형 플랫폼에서 실행되거나, 가상 인터럽트 전달을 지원하지 않고 이 검사를 강제하는 하이퍼바이저(예: Hyper-V) 아래 중첩 가상화 환경에서 실행될 경우, 이는 하드웨어 오류 0x7과 함께 VM 진입 실패를 유발할 수 있습니다. [1]에서 확인된 바와 같습니다.
apic_update_ppr()이 처리 가능한 인터럽트를 찾지 못하면(따라서 KVM_REQ_EVENT를 발생시키지 않는다면) kvm_lapic_update_cr8_intercept()를 호출합니다. apic_update_ppr()으로 끝나는 경로에서의 kvm_lapic_update_cr8_intercept() 호출을 제거합니다. 이는 이제 중복이 되기 때문입니다. 이를 통해 게스트의 PPR을 업데이트하는 모든 경로가 KVM이 TPR 변경 대기 여부를 결정해야 하는지(TPX에서는 TPR_THRESHOLD를, SVM에서는 CR8 인터셉트를 사용) 확인하도록 보장됩니다.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.