KVM: nVMX: mask unrestricted_guest if disabled on L0
Subsystems (4)
PATCH RESEND 1/1 KVM: nVMX: mask unrestricted_guest if disabled on L0
If EPT was enabled, unrestricted_guest was allowed in L1 regardless of L0. L1 triple faulted when running L2 guest that required emulation.
Another side effect was 'WARN_ON_ONCE(vmx->nested.nested_run_pending)' in L0's dmesg:
WARNING: CPU: 0 PID: 0 at arch/x86/kvm/vmx.c:9190 nested_vmx_vmexit+0x96e/0xb00 [kvm_intel] ()
Prevent this scenario by masking SECONDARY_EXEC_UNRESTRICTED_GUEST when the host doesn't have it enabled.
---
The resend Cc'd stable, as recommended by Bandan, and added Tested-by.
arch/x86/kvm/vmx.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
arch/x86/kvm/vmx.c +5 -2
@@ -2479,8 +2479,7 @@ static void nested_vmx_setup_ctls_msrs(struct vcpu_vmx *vmx)if (enable_ept) {/* nested EPT: emulate EPT also to L1 */ vmx->nested.nested_vmx_secondary_ctls_high |= -SECONDARY_EXEC_ENABLE_EPT | -SECONDARY_EXEC_UNRESTRICTED_GUEST ; +SECONDARY_EXEC_ENABLE_EPT ; vmx->nested.nested_vmx_ept_caps =VMX_EPT_PAGE_WALK_4_BIT |VMX_EPTP_WB_BIT |VMX_EPT_2MB_PAGE_BIT |VMX_EPT_INVEPT_BIT ;
@@ -2494,6 +2493,10 @@ static void nested_vmx_setup_ctls_msrs(struct vcpu_vmx *vmx) }else vmx->nested.nested_vmx_ept_caps =0 ; +if (enable_unrestricted_guest) + vmx->nested.nested_vmx_secondary_ctls_high |= +SECONDARY_EXEC_UNRESTRICTED_GUEST ; +/* miscellaneous data */ rdmsr(MSR_IA32_VMX_MISC, vmx->nested.nested_vmx_misc_low,
Signature · 1 line
2.3.2
Quoted 5 lines · Radim Krčmář
If EPT was enabled,
unrestricted_guestwas allowed in L1 regardless of L0. L1 triple faulted when running L2 guest that required emulation.Another side effect was '
WARN_ON_ONCE(vmx->nested.nested_run_pending)' in L0's dmesg:
Quoted 8 lines
WARNING: CPU: 0 PID: 0 at arch/x86/kvm/vmx.c:9190 nested_vmx_vmexit+0x96e/0xb00 [kvm_intel] ()Prevent this scenario by masking
SECONDARY_EXEC_UNRESTRICTED_GUESTwhen the host doesn't have it enabled.Fixes 78051e3b7e35 ("KVM: nVMX: Disable unrestricted mode if ept=0")Tested-by Kashyap Chamarthy <[email protected]>
Thanks Radim, for resending it. I was trying to find it in one of the recent pull requests. :-)
Just for forerence, test confirmation:
http://article.gmane.org/gmane.comp.emulators.kvm.devel/133075
Complete thread related to this topic:
http://thread.gmane.org/gmane.comp.emulators.kvm.devel/132863
Signature · 1 line
/kashyap
Quoted 35 lines
Signed-off-by Radim Krčmář <[email protected]>---
The resend Cc'd stable, as recommended by Bandan, and added Tested-by.arch/x86/kvm/vmx.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)arch/x86/kvm/vmx.c +5
-2@@ -2479,8 +2479,7 @@ static void nested_vmx_setup_ctls_msrs(struct vcpu_vmx *vmx)if (enable_ept) {/* nested EPT: emulate EPT also to L1 */ vmx->nested.nested_vmx_secondary_ctls_high |= -SECONDARY_EXEC_ENABLE_EPT | -SECONDARY_EXEC_UNRESTRICTED_GUEST ; +SECONDARY_EXEC_ENABLE_EPT ; vmx->nested.nested_vmx_ept_caps =VMX_EPT_PAGE_WALK_4_BIT |VMX_EPTP_WB_BIT |VMX_EPT_2MB_PAGE_BIT |VMX_EPT_INVEPT_BIT ;@@ -2494,6 +2493,10 @@ static void nested_vmx_setup_ctls_msrs(struct vcpu_vmx *vmx) }else vmx->nested.nested_vmx_ept_caps =0 ; +if (enable_unrestricted_guest) + vmx->nested.nested_vmx_secondary_ctls_high |= +SECONDARY_EXEC_UNRESTRICTED_GUEST ; +/* miscellaneous data */ rdmsr(MSR_IA32_VMX_MISC, vmx->nested.nested_vmx_misc_low,Signature · 1 line
2.3.2
Marcelo Tosatti
AppliedQuoted 10 lines · Radim Krčmář
If EPT was enabled,
unrestricted_guestwas allowed in L1 regardless of L0. L1 triple faulted when running L2 guest that required emulation.Another side effect was '
WARN_ON_ONCE(vmx->nested.nested_run_pending)' in L0's dmesg:WARNING: CPU: 0 PID: 0 at arch/x86/kvm/vmx.c:9190 nested_vmx_vmexit+0x96e/0xb00 [kvm_intel] ()Prevent this scenario by masking
SECONDARY_EXEC_UNRESTRICTED_GUESTwhen the host doesn't have it enabled.
Quoted 6 lines
Fixes 78051e3b7e35 ("KVM: nVMX: Disable unrestricted mode if ept=0")Tested-by Kashyap Chamarthy <[email protected]>Signed-off-by Radim Krčmář <[email protected]>---
The resend Cc'd stable, as recommended by Bandan, and added Tested-by.
Applied to master, thanks.