[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 9/9] x86/vmx: Don't leak EFER.NXE into guest context
>>> On 22.05.18 at 13:20, <andrew.cooper3@xxxxxxxxxx> wrote: > @@ -1650,22 +1641,81 @@ static void vmx_update_guest_cr(struct vcpu *v, > unsigned int cr, > > static void vmx_update_guest_efer(struct vcpu *v) > { > - unsigned long vm_entry_value; > + unsigned long entry_ctls, guest_efer = v->arch.hvm_vcpu.guest_efer, > + xen_efer = read_efer(); > + > + if ( paging_mode_shadow(v->domain) ) > + { > + /* > + * When using shadow pagetables, EFER.NX is a Xen-owned bit and is > not > + * under guest control. > + */ > + guest_efer &= ~EFER_NX; > + guest_efer |= xen_efer & EFER_NX; > + > + /* > + * At the time of writing (May 2018), the Intel SDM "VM Entry: Checks > + * on Guest Control Registers, Debug Registers and MSRs" section > says: > + * > + * If the "Load IA32_EFER" VM-entry control is 1, the following > + * checks are performed on the field for the IA32_MSR: > + * - Bits reserved in the IA32_EFER MSR must be 0. > + * - Bit 10 (corresponding to IA32_EFER.LMA) must equal the value > of > + * the "IA-32e mode guest" VM-entry control. It must also be > + * identical to bit 8 (LME) if bit 31 in the CR0 field > + * (corresponding to CR0.PG) is 1. > + * > + * Experimentally what actually happens is: > + * - Checks for EFER.{LME,LMA} apply uniformly whether using the > + * GUEST_EFER VMCS controls, or MSR load/save lists. > + * - Without EPT, LME being different to LMA isn't tolerated by > + * hardware. As writes to CR0 are intercepted, it is safe to > + * leave LME clear at this point, and fix up both LME and LMA > when > + * CR0.PG is set. > + */ > + if ( !(guest_efer & EFER_LMA) ) > + guest_efer &= ~EFER_LME; > + } Why is this latter adjustments done only for shadow mode? After the above adjustments, when guest_efer still matches v->arch.hvm_vcpu.guest_efer, couldn't we disable the MSR read intercept? Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |