Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e8861cfe authored by Jan Kiszka's avatar Jan Kiszka Committed by Avi Kivity
Browse files

KVM: x86: Fix TSS size check for 16-bit tasks



A 16-bit TSS is only 44 bytes long. So make sure to test for the correct
size on task switch.

Signed-off-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
parent eda2beda
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -5126,6 +5126,7 @@ int kvm_task_switch(struct kvm_vcpu *vcpu, u16 tss_selector, int reason)
	int ret = 0;
	u32 old_tss_base = get_segment_base(vcpu, VCPU_SREG_TR);
	u16 old_tss_sel = get_segment_selector(vcpu, VCPU_SREG_TR);
	u32 desc_limit;

	old_tss_base = kvm_mmu_gva_to_gpa_write(vcpu, old_tss_base, NULL);

@@ -5148,7 +5149,10 @@ int kvm_task_switch(struct kvm_vcpu *vcpu, u16 tss_selector, int reason)
		}
	}

	if (!nseg_desc.p || get_desc_limit(&nseg_desc) < 0x67) {
	desc_limit = get_desc_limit(&nseg_desc);
	if (!nseg_desc.p ||
	    ((desc_limit < 0x67 && (nseg_desc.type & 8)) ||
	     desc_limit < 0x2b)) {
		kvm_queue_exception_e(vcpu, TS_VECTOR, tss_selector & 0xfffc);
		return 1;
	}