CVE-2022-49559 Information
Description
In the Linux kernel the following vulnerability has been resolved:
KVM: x86: Drop WARNs that assert a triple fault never scapes\ 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:
Reference
https://git.kernel.org/stable/c/45846661d10422ce9e22da21f8277540b29eca22 https://git.kernel.org/stable/c/7de373c9b48229e428ecdb8fbde269c5a8617fd2 https://git.kernel.org/stable/c/8d3a2aa0976f57320ba89baf9d57fb158dd0cd0d https://git.kernel.org/stable/c/f476a59d5c86c02a79eef893c6da86735f2977ac
Share on: