KVM: Fix guest sysenter on vmx
The vmx code currently treats the guest's sysenter support msrs as 32-bit values, which breaks 32-bit compat mode userspace on 64-bit guests. Fix by using the native word width of the machine. Signed-off-by: Avi Kivity <avi@qumranet.com>
This commit is contained in:
Родитель
ca45aaae1e
Коммит
f5b42c3324
|
@ -371,10 +371,10 @@ static int vmx_get_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 *pdata)
|
|||
data = vmcs_read32(GUEST_SYSENTER_CS);
|
||||
break;
|
||||
case MSR_IA32_SYSENTER_EIP:
|
||||
data = vmcs_read32(GUEST_SYSENTER_EIP);
|
||||
data = vmcs_readl(GUEST_SYSENTER_EIP);
|
||||
break;
|
||||
case MSR_IA32_SYSENTER_ESP:
|
||||
data = vmcs_read32(GUEST_SYSENTER_ESP);
|
||||
data = vmcs_readl(GUEST_SYSENTER_ESP);
|
||||
break;
|
||||
default:
|
||||
msr = find_msr_entry(vcpu, msr_index);
|
||||
|
@ -412,10 +412,10 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 data)
|
|||
vmcs_write32(GUEST_SYSENTER_CS, data);
|
||||
break;
|
||||
case MSR_IA32_SYSENTER_EIP:
|
||||
vmcs_write32(GUEST_SYSENTER_EIP, data);
|
||||
vmcs_writel(GUEST_SYSENTER_EIP, data);
|
||||
break;
|
||||
case MSR_IA32_SYSENTER_ESP:
|
||||
vmcs_write32(GUEST_SYSENTER_ESP, data);
|
||||
vmcs_writel(GUEST_SYSENTER_ESP, data);
|
||||
break;
|
||||
case MSR_IA32_TIME_STAMP_COUNTER:
|
||||
guest_write_tsc(data);
|
||||
|
|
Загрузка…
Ссылка в новой задаче