From: Roger Pau Monné Date: Mon, 23 Sep 2019 12:39:37 +0000 (+0200) Subject: p2m/ept: pass correct level to atomic_write_ept_entry in ept_invalidate_emt X-Git-Tag: archive/raspbian/4.11.3+24-g14b62ab3e5-1+rpi1^2~55^2~106 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=802f9940fe9ba80253a3e8b652ae9f6f21703993;p=xen.git p2m/ept: pass correct level to atomic_write_ept_entry in ept_invalidate_emt The level passed to ept_invalidate_emt corresponds to the EPT entry passed as the mfn parameter, which is a pointer to an EPT page table, hence the entries in that page table will have one level less than the parent. Fix the call to atomic_write_ept_entry to pass the correct level, ie: one level less than the parent. Fixes: 50fe6e73705 ('pvh dom0: add and remove foreign pages') Signed-off-by: Roger Pau Monné Reviewed-by: Kevin Tian . master commit: b806c91275fb1ab7696ebf033b56631693056c90 master date: 2019-08-28 16:57:36 +0200 --- diff --git a/xen/arch/x86/mm/p2m-ept.c b/xen/arch/x86/mm/p2m-ept.c index 14b593923b..ce46201d45 100644 --- a/xen/arch/x86/mm/p2m-ept.c +++ b/xen/arch/x86/mm/p2m-ept.c @@ -389,7 +389,8 @@ static int ept_next_level(struct p2m_domain *p2m, bool_t read_only, * present entries in the given page table, optionally marking the entries * also for their subtrees needing P2M type re-calculation. */ -static bool_t ept_invalidate_emt(mfn_t mfn, bool_t recalc, int level) +static bool_t ept_invalidate_emt(mfn_t mfn, bool_t recalc, + unsigned int parent_level) { int rc; ept_entry_t *epte = map_domain_page(mfn); @@ -407,7 +408,7 @@ static bool_t ept_invalidate_emt(mfn_t mfn, bool_t recalc, int level) e.emt = MTRR_NUM_TYPES; if ( recalc ) e.recalc = 1; - rc = atomic_write_ept_entry(&epte[i], e, level); + rc = atomic_write_ept_entry(&epte[i], e, parent_level - 1); ASSERT(rc == 0); changed = 1; }