Re: [PATCH] KVM nVMX: MSRs should not be stored if VM-entry fails during or after loading guest state

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

 



On Fri, Nov 30, 2018 at 02:22:03PM -0800, Jim Mattson wrote:
> On Fri, Nov 30, 2018 at 9:53 AM Krish Sadhukhan
> <krish.sadhukhan@xxxxxxxxxx> wrote:
> >
> > If a bit-pattern for the MSR-store address is so chosen that the
> > address is 16-bit aligned and is less than the processor's physical
> > width, but is a junk, VMENTRY ultimately fails even though we
> > pass the checks in check_vmentry_prereqs(). In such a case, the high bit
> > in "exit reason" will be set, denoting a VM-entry failure. But since we
> > call nested_vmx_store_msr() in nested_vmx_vmexit() without checking the
> > "exit reason", we may end up storing the MSRs at an undefined location in
> > memory thereby clobbering something else. This patch fixes the problem by
> > calling nested_vmx_store_msr() only when "exit reason" is not VM-entry
> > failure.
> 
> This is not a very good description of the problem.

Agreed.  And the changelog also fails to mention the flows where we're
not emulating a true VMExit, i.e. exit_reason==-1.  Not storing the MSRs
in those cases is correct, but it should be addressed in the changelog.

> Perhaps...
> 
> Per the SDM, volume 3, section 26.7: VM-entry Failures During or After
> Loading Guest State, "no MSRs are saved into the VM-exit MSR-store
> area" when bit 31 of the exit reason is set.

Something like this would also be a good comment in the code, maybe with
a bit of elaboration as to why, e.g.:

       	/*
	 * VM-exits due to VM-entry failures that occur during or after
	 * loading guest state do not process the MSR store list.
	 * There's no need to store the guest's MSR values as the guest
	 * can't have changed its MSRs (never executed an instruction).
	 */
	if (nested_vmx_store_msr(vcpu, vmcs12->vm_exit_msr_store_addr,
				 vmcs12->vm_exit_msr_store_count))
		nested_vmx_abort(vcpu, VMX_ABORT_SAVE_GUEST_MSR_FAIL);



[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