diff options
author | Eugene Korenevsky <ekorenevsky@gmail.com> | 2019-06-06 00:19:16 +0300 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2019-06-18 11:43:45 +0200 |
commit | fdb28619a8f033c13f5d9b9e8b5536bb6e68a2c3 (patch) | |
tree | 42bd37018ff4798e0e89ea671e899e7c98c1f5fe /arch/x86/kvm/vmx/vmx.c | |
parent | c1a9acbc5295e278d788e9f7510f543bc9864fa2 (diff) | |
download | lwn-fdb28619a8f033c13f5d9b9e8b5536bb6e68a2c3.tar.gz lwn-fdb28619a8f033c13f5d9b9e8b5536bb6e68a2c3.zip |
kvm: vmx: segment limit check: use access length
There is an imperfection in get_vmx_mem_address(): access length is ignored
when checking the limit. To fix this, pass access length as a function argument.
The access length is usually obvious since it is used by callers after
get_vmx_mem_address() call, but for vmread/vmwrite it depends on the
state of 64-bit mode.
Signed-off-by: Eugene Korenevsky <ekorenevsky@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/x86/kvm/vmx/vmx.c')
-rw-r--r-- | arch/x86/kvm/vmx/vmx.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index f91323d527be..cccf73a91e88 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -5345,7 +5345,8 @@ static int handle_invpcid(struct kvm_vcpu *vcpu) * is read even if it isn't needed (e.g., for type==all) */ if (get_vmx_mem_address(vcpu, vmcs_readl(EXIT_QUALIFICATION), - vmx_instruction_info, false, &gva)) + vmx_instruction_info, false, + sizeof(operand), &gva)) return 1; if (kvm_read_guest_virt(vcpu, gva, &operand, sizeof(operand), &e)) { |