Re: Kernel GPF in vmx_save_host_state()

Avi Kivity
2009-03-23T19:25:20Z

[-- Attachment #1: Type: text/plain, Size: 544 bytes --]

Benjamin Gilbert wrote:
>>> vmx_set_msr: msr_index 0xc0000080 msr->index 0xc0000080 msr->data 0x100
>>
>> How did that get in there?!
>>
>> Please add a dump_stack() after that printk().
>
> Pid: 2381, comm: qemu-system-x86 Not tainted 2.6.28-686 #4
> Call Trace:
> [<f8cf2fdc>] vmx_set_msr+0x150/0x178 [kvm_intel]
> [<f8cf325a>] handle_wrmsr+0x71/0x9d [kvm_intel]

Duh, I noted this hole in a previous email.

Attached patch should fix.

--
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.

[-- Attachment #2: dont-allow-uninhibited-efer-access-on-i386.patch --]
[-- Type: text/x-patch, Size: 485 bytes --]

diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 88ef094..da6461d 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -942,11 +942,11 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 data)
int ret = 0;

switch (msr_index) {
-#ifdef CONFIG_X86_64
case MSR_EFER:
vmx_load_host_state(vmx);
ret = kvm_set_msr_common(vcpu, msr_index, data);
break;
+#ifdef CONFIG_X86_64
case MSR_FS_BASE:
vmcs_writel(GUEST_FS_BASE, data);
break;