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

Re: [Xen-devel] [PATCH] ept: Put locks around ept_get_entry



On Friday 27 August 2010 13:23:57 George Dunlap wrote:
> There's a subtle race in ept_get_entry, such that if tries to read an
> entry that ept_set_entry is modifying, it gets neither the old entry
> nor the new entry, but empty.  In the case of multi-cpu populate-on-demand
> guests, this manifests as a guest crash when one vcpu tries to read a
> page which another page is trying to populate, and ept_get_entry returns
> p2m_mmio_dm.
>
> This bug can also be fixed by making both ept_set_entry and ept_next_level
> access-once (i.e., ept_next_level reads full ept_entry and then works with
> local value; ept_set_entry construct the entry locally and then sets it
> in one write).  But there doesn't seem to be any major performance
> implications of just making ept_get_entry use locks; so the simpler, the
> better.
>
> Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx>

Please use p2m_get_hostp2m(d) instead of d->arch.p2m.

Christoph


> diff -r 3c4c3d48a835 -r e17c8f37a2c2 xen/arch/x86/mm/hap/p2m-ept.c
> --- a/xen/arch/x86/mm/hap/p2m-ept.c   Thu Aug 26 11:16:56 2010 +0100
> +++ b/xen/arch/x86/mm/hap/p2m-ept.c   Fri Aug 27 12:23:27 2010 +0100
> @@ -431,6 +431,10 @@
>      int i;
>      int ret = 0;
>      mfn_t mfn = _mfn(INVALID_MFN);
> +    int do_locking = !p2m_locked_by_me(d->arch.p2m);
> +
> +    if ( do_locking )
> +        p2m_lock(d->arch.p2m);
>
>      *t = p2m_mmio_dm;
>
> @@ -507,6 +511,8 @@
>      }
>
>  out:
> +    if ( do_locking )
> +        p2m_unlock(d->arch.p2m);
>      unmap_domain_page(table);
>      return mfn;
>  }
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



-- 
---to satisfy European Law for business letters:
Advanced Micro Devices GmbH
Einsteinring 24, 85609 Dornach b. Muenchen
Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd
Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen
Registergericht Muenchen, HRB Nr. 43632


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.