File 20628-x86-WP=0-emulation.patch of Package xen
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1260777142 0
# Node ID 3d505c9f1b7344e2debe4f1a905c6d42a179b93d
# Parent c61953922215ecde526468d5a2ebe5147eee7529
hvm: Fix CR0.WP=0 emulation. Don't take write emulation path for MMIO.
Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com>
--- a/xen/arch/x86/mm/shadow/common.c
+++ b/xen/arch/x86/mm/shadow/common.c
@@ -2656,6 +2656,7 @@ void sh_remove_shadows(struct vcpu *v, m
};
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
--- a/xen/arch/x86/mm/shadow/multi.c
+++ b/xen/arch/x86/mm/shadow/multi.c
@@ -3420,7 +3420,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;