From 018b6522ced796ef149bb2063db2d3d3643f17f1 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Mon, 14 Dec 2009 07:52:22 +0000 Subject: [PATCH] hvm: Fix CR0.WP=0 emulation. Don't take write emulation path for MMIO. Signed-off-by: Simon Horman Signed-off-by: Tim Deegan --- xen/arch/x86/mm/shadow/common.c | 1 + xen/arch/x86/mm/shadow/multi.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c index dc288fd364..434d567536 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -2752,6 +2752,7 @@ void sh_remove_shadows(struct vcpu *v, mfn_t gmfn, int fast, int all) }; ASSERT(!(all && fast)); + ASSERT(mfn_valid(gmfn)); /* Although this is an externally visible function, we do not know * whether the shadow lock will be held when it is called (since it diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index 4675eab675..49f8349cd2 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -3305,7 +3305,8 @@ static int sh_page_fault(struct vcpu *v, * fault was a non-user write to a present page. */ if ( is_hvm_domain(d) && unlikely(!hvm_wp_enabled(v)) - && regs->error_code == (PFEC_write_access|PFEC_page_present) ) + && regs->error_code == (PFEC_write_access|PFEC_page_present) + && mfn_valid(gmfn) ) { perfc_incr(shadow_fault_emulate_wp); goto emulate; -- 2.30.2