Discussion:
[Xen-changelog] [xen staging] x86/HVM: make hvmemul_map_linear_addr() honor p2m_ioreq_server
p***@xen.org
2018-11-15 12:44:35 UTC
Permalink
commit bfdd5e58763a32afdf04b022e2698d39ae4cf4d6
Author: Jan Beulich <***@suse.com>
AuthorDate: Thu Nov 15 13:36:10 2018 +0100
Commit: Jan Beulich <***@suse.com>
CommitDate: Thu Nov 15 13:36:10 2018 +0100

x86/HVM: make hvmemul_map_linear_addr() honor p2m_ioreq_server

Write accesses to p2m_ioreq_server pages should get redirected to the
emulator also when using the mapping approach. Extend the
p2m_is_discard_write() check there, and restrict both to the write
access case (this is just a latent bug as currently we go this route
only for write accesses).

Signed-off-by: Jan Beulich <***@suse.com>
Reviewed-by: Paul Durrant <***@citrix.com>
---
xen/arch/x86/hvm/emulate.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c
index 9e7deaa6cd..e08524be49 100644
--- a/xen/arch/x86/hvm/emulate.c
+++ b/xen/arch/x86/hvm/emulate.c
@@ -613,10 +613,21 @@ static void *hvmemul_map_linear_addr(

*mfn++ = page_to_mfn(page);

- if ( p2m_is_discard_write(p2mt) )
+ if ( pfec & PFEC_write_access )
{
- err = ERR_PTR(~X86EMUL_OKAY);
- goto out;
+ if ( p2m_is_discard_write(p2mt) )
+ {
+ err = ERR_PTR(~X86EMUL_OKAY);
+ goto out;
+ }
+
+ if ( p2mt == p2m_ioreq_server )
+ {
+ err = NULL;
+ goto out;
+ }
+
+ ASSERT(p2mt == p2m_ram_logdirty || !p2m_is_readonly(p2mt));
}
}

--
generated by git-patchbot for /home/xen/git/xen.git#staging

Loading...