path: root/arch
diff options
authorMaxim Levitsky <>2021-07-19 16:05:00 +0300
committerPaolo Bonzini <>2021-08-16 09:48:37 -0400
commitc7dfa4009965a9b2d7b329ee970eb8da0d32f0bc (patch)
tree42c6b74cec101cdffce4c14e608b4c672adb4b61 /arch
parent0f923e07124df069ba68d8bb12324398f4b6b709 (diff)
KVM: nSVM: always intercept VMLOAD/VMSAVE when nested (CVE-2021-3656)
If L1 disables VMLOAD/VMSAVE intercepts, and doesn't enable Virtual VMLOAD/VMSAVE (currently not supported for the nested hypervisor), then VMLOAD/VMSAVE must operate on the L1 physical memory, which is only possible by making L0 intercept these instructions. Failure to do so allowed the nested guest to run VMLOAD/VMSAVE unintercepted, and thus read/write portions of the host physical memory. Fixes: 89c8a4984fc9 ("KVM: SVM: Enable Virtual VMLOAD VMSAVE feature") Suggested-by: Paolo Bonzini <> Signed-off-by: Maxim Levitsky <> Signed-off-by: Paolo Bonzini <>
Diffstat (limited to 'arch')
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c
index 28381ca5221c..e5515477c30a 100644
--- a/arch/x86/kvm/svm/nested.c
+++ b/arch/x86/kvm/svm/nested.c
@@ -158,6 +158,9 @@ void recalc_intercepts(struct vcpu_svm *svm)
/* If SMI is not intercepted, ignore guest SMI intercept as well */
if (!intercept_smi)
vmcb_clr_intercept(c, INTERCEPT_SMI);
+ vmcb_set_intercept(c, INTERCEPT_VMLOAD);
+ vmcb_set_intercept(c, INTERCEPT_VMSAVE);
static void copy_vmcb_control_area(struct vmcb_control_area *dst,