Re: [PATCH] KVM: x86: remove vcpu's CPL check in host invoked vcpu's xcr set process

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>> __kvm_set_xcr function does the CPL check when set xcr. __kvm_set_xcr 
>> is called in two flows, one is invoked by guest, call stack shown as 
>> below, handle_xsetbv(or xsetbv_interception)
>>   kvm_set_xcr
>>     __kvm_set_xcr
>> the other one is invoked by host(QEMU), call stack shown as below, 
>> kvm_arch_vcpu_ioctl
>>   kvm_vcpu_ioctl_x86_set_xcrs
>>     __kvm_set_xcr
>> 
>> The former does need the CPL check, but the latter does not.
>> 
>> Signed-off-by: Zhang Haoyu <haoyu.zhang@xxxxxxxxxx>
>
>What does this patch fix?  I suppose it is some kind of migration problem since you mentioned QEMU, but I'd rather be sure.  I can fix the commit message myself when applying.
This patch tries to fix the problem of system_reset invoked by qemu monitor[system_reset] or virsh command[virsh reset domain].
QEMU will reset the domain on receiving the reset request from qemu monitor or libvirtd, the reset flow shown as below,
main_loop_should_exit
|- pause_all_vcpus
|- cpu_synchronize_all_states
|- qemu_system_reset
|-- cpu_synchronize_all_post_reset
|--- cpu_synchronize_post_reset
|---- kvm_cpu_synchronize_post_reset
|----- kvm_arch_put_registers
|------ kvm_put_xcrs
|------- kvm_vcpu_ioctl(CPU(cpu), KVM_SET_XCRS, &xcrs)
Above IOCTL syscall traps to kernel-space, KVM hypervisor then deal with the xcr set request,
kvm_arch_vcpu_ioctl
|- kvm_vcpu_ioctl_x86_set_xcrs
|-- __kvm_set_xcr
|--- if (kvm_x86_ops->get_cpl(vcpu) != 0)
          return 1;
It's quite probably happened that vcpu's CPL is 3 while QEMU monitor doing the reset operation, which is a normal case, so the CPL check should be removed.

But __kvm_set_xcr is also called in below flow, which is invoked by guest,
handle_xsetbv(or xsetbv_interception)
|- kvm_set_xcr
|-- __kvm_set_xcr
On this case, vcpu's CPL check must be performed, if vcpu's CPL!=0, then #GP exception should be injected to VM.

Thanks,
Zhang Haoyu

>
>Thanks,
>
>Paolo
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux