CVE-2022-49559

KVM: x86: Drop WARNs that assert a triple fault never "escapes" from L2

published February 26, 2025

CVSS
—
EPSS
0%
Percentile
21.4
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

KVM: x86: Drop WARNs that assert a triple fault never "escapes" from L2

Remove WARNs that sanity check that KVM never lets a triple fault for L2

escape and incorrectly end up in L1. In normal operation, the sanity

check is perfectly valid, but it incorrectly assumes that it's impossible

for userspace to induce KVM_REQ_TRIPLE_FAULT without bouncing through

KVM_RUN (which guarantees kvm_check_nested_state() will see and handle

the triple fault).

The WARN can currently be triggered if userspace injects a machine check

while L2 is active and CR4.MCE=0. And a future fix to allow save/restore

of KVM_REQ_TRIPLE_FAULT, e.g. so that a synthesized triple fault isn't

lost on migration, will make it trivially easy for userspace to trigger

the WARN.

Clearing KVM_REQ_TRIPLE_FAULT when forcibly leaving guest mode is

tempting, but wrong, especially if/when the request is saved/restored,

e.g. if userspace restores events (including a triple fault) and then

restores nested state (which may forcibly leave guest mode). Ignoring

the fact that KVM doesn't currently provide the necessary APIs, it's

userspace's responsibility to manage pending events during save/restore.

------------[ cut here ]------------

WARNING: CPU: 7 PID: 1399 at arch/x86/kvm/vmx/nested.c:4522 nested_vmx_vmexit+0x7fe/0xd90 [kvm_intel]

Modules linked in: kvm_intel kvm irqbypass

CPU: 7 PID: 1399 Comm: state_test Not tainted 5.17.0-rc3+ #808

Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015

RIP: 0010:nested_vmx_vmexit+0x7fe/0xd90 [kvm_intel]

Call Trace:

<TASK>

vmx_leave_nested+0x30/0x40 [kvm_intel]

vmx_set_nested_state+0xca/0x3e0 [kvm_intel]

kvm_arch_vcpu_ioctl+0xf49/0x13e0 [kvm]

kvm_vcpu_ioctl+0x4b9/0x660 [kvm]

__x64_sys_ioctl+0x83/0xb0

do_syscall_64+0x3b/0xc0

entry_SYSCALL_64_after_hwframe+0x44/0xae

</TASK>

---[ end trace 0000000000000000 ]---

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00299 · 21.4th percentile
Published
2025-02-26T02:14Z
EPSS history
Timeline
  • 26 FEB 02:14Z
    KVM: x86: Drop WARNs that assert a triple fault never "escapes" from L2
    cvelistv5