KVM: SVM: ignore type when setting segment registers
authorGioh Kim <gi-oh.kim@profitbricks.com>
Tue, 30 May 2017 13:24:45 +0000 (15:24 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 30 May 2017 15:17:22 +0000 (17:17 +0200)
Commit 19bca6ab75d8 ("KVM: SVM: Fix cross vendor migration issue with
unusable bit") added checking type when setting unusable.
So unusable can be set if present is 0 OR type is 0.
According to the AMD processor manual, long mode ignores the type value
in segment descriptor. And type can be 0 if it is read-only data segment.
Therefore type value is not related to unusable flag.

This patch is based on linux-next v4.12.0-rc3.

Signed-off-by: Gioh Kim <gi-oh.kim@profitbricks.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/svm.c

index 183ddb235fb48658028433d451db75d554152c54..a654372efea183e49ab5992f3fff7c051b7a72db 100644 (file)
@@ -1807,7 +1807,7 @@ static void svm_get_segment(struct kvm_vcpu *vcpu,
         * AMD's VMCB does not have an explicit unusable field, so emulate it
         * for cross vendor migration purposes by "not present"
         */
-       var->unusable = !var->present || (var->type == 0);
+       var->unusable = !var->present;
 
        switch (seg) {
        case VCPU_SREG_TR: