From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tim Deegan Subject: [PATCH 3/5] x86/ept: check for errors in a few callers of ept_set_entry. Date: Thu, 7 Mar 2013 14:53:01 +0000 Message-ID: <1362667983-24938-4-git-send-email-tim@xen.org> References: <1362667983-24938-1-git-send-email-tim@xen.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1362667983-24938-1-git-send-email-tim@xen.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: Eddie Dong , Jun Nakajima List-Id: xen-devel@lists.xenproject.org AFAICT in all these cases we have the p2m lock and have just checked that the p2m trie is populated so the call should succeed. Make it explicit with ASSERT() rather than just ignoring the result. Signed-off-by: Tim Deegan Cc: Jun Nakajima Cc: Eddie Dong --- xen/arch/x86/mm/p2m-ept.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/xen/arch/x86/mm/p2m-ept.c b/xen/arch/x86/mm/p2m-ept.c index a2d1591..595c6e7 100644 --- a/xen/arch/x86/mm/p2m-ept.c +++ b/xen/arch/x86/mm/p2m-ept.c @@ -401,8 +401,9 @@ ept_set_entry(struct p2m_domain *p2m, unsigned long gfn, mfn_t mfn, /* then move to the level we want to make real changes */ for ( ; i > target; i-- ) - ept_next_level(p2m, 0, &table, &gfn_remainder, i); - + if ( !ept_next_level(p2m, 0, &table, &gfn_remainder, i) ) + break; + /* We just installed the pages we need. */ ASSERT(i == target); index = gfn_remainder >> (i * EPT_TABLE_ORDER); @@ -704,6 +705,7 @@ void ept_change_entry_emt_with_range(struct domain *d, mfn_t mfn; int order = 0; struct p2m_domain *p2m = p2m_get_hostp2m(d); + int rc; p2m_lock(p2m); for ( gfn = start_gfn; gfn <= end_gfn; gfn++ ) @@ -732,7 +734,11 @@ void ept_change_entry_emt_with_range(struct domain *d, order = level * EPT_TABLE_ORDER; if ( need_modify_ept_entry(p2m, gfn, mfn, e.ipat, e.emt, e.sa_p2mt) ) - ept_set_entry(p2m, gfn, mfn, order, e.sa_p2mt, e.access); + { + rc = ept_set_entry(p2m, gfn, mfn, order, + e.sa_p2mt, e.access); + ASSERT(rc); + } gfn += trunk; break; } @@ -741,8 +747,12 @@ void ept_change_entry_emt_with_range(struct domain *d, } else /* gfn assigned with 4k */ { - if ( need_modify_ept_entry(p2m, gfn, mfn, e.ipat, e.emt, e.sa_p2mt) ) - ept_set_entry(p2m, gfn, mfn, order, e.sa_p2mt, e.access); + if ( need_modify_ept_entry(p2m, gfn, mfn, + e.ipat, e.emt, e.sa_p2mt) ) + { + rc = ept_set_entry(p2m, gfn, mfn, order, e.sa_p2mt, e.access); + ASSERT(rc); + } } } p2m_unlock(p2m); -- 1.7.10.4