diff options
author | Joel Stanley <joel@jms.id.au> | 2016-08-04 13:24:41 +0930 |
---|---|---|
committer | Joel Stanley <joel@jms.id.au> | 2016-08-04 13:24:41 +0930 |
commit | b916113d820adc856aad6b8ebc1a25403ff7f293 (patch) | |
tree | abddf239d912c4868faf9fbc69c67d980f74c7df /arch/x86/kvm/vmx.c | |
parent | 2e4db6c6be91ade074c1a150a6db2aeb4920e25c (diff) | |
parent | b05965f284db3e086022f4e318e46cb5bffb1376 (diff) | |
download | talos-obmc-linux-openbmc-4.4-20160804-1.tar.gz talos-obmc-linux-openbmc-4.4-20160804-1.zip |
Merge tag 'v4.4.16' into dev-4.4openbmc-4.4-20160804-1
This is the 4.4.16 stable release
Signed-off-by: Joel Stanley <joel@jms.id.au>
Diffstat (limited to 'arch/x86/kvm/vmx.c')
-rw-r--r-- | arch/x86/kvm/vmx.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index f314e9b9660b..41e7943004fe 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -6579,7 +6579,13 @@ static int get_vmx_mem_address(struct kvm_vcpu *vcpu, /* Checks for #GP/#SS exceptions. */ exn = false; - if (is_protmode(vcpu)) { + if (is_long_mode(vcpu)) { + /* Long mode: #GP(0)/#SS(0) if the memory address is in a + * non-canonical form. This is the only check on the memory + * destination for long mode! + */ + exn = is_noncanonical_address(*ret); + } else if (is_protmode(vcpu)) { /* Protected mode: apply checks for segment validity in the * following order: * - segment type check (#GP(0) may be thrown) @@ -6596,17 +6602,10 @@ static int get_vmx_mem_address(struct kvm_vcpu *vcpu, * execute-only code segment */ exn = ((s.type & 0xa) == 8); - } - if (exn) { - kvm_queue_exception_e(vcpu, GP_VECTOR, 0); - return 1; - } - if (is_long_mode(vcpu)) { - /* Long mode: #GP(0)/#SS(0) if the memory address is in a - * non-canonical form. This is an only check for long mode. - */ - exn = is_noncanonical_address(*ret); - } else if (is_protmode(vcpu)) { + if (exn) { + kvm_queue_exception_e(vcpu, GP_VECTOR, 0); + return 1; + } /* Protected mode: #GP(0)/#SS(0) if the segment is unusable. */ exn = (s.unusable != 0); |