ChangeSet 1.1357, 2005/03/23 18:19:15+00:00, kaf24@xxxxxxxxxxxxxxxxxxxx
A few ptwr cleanups/fixes.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
mm.c | 15 ++++++++-------
1 files changed, 8 insertions(+), 7 deletions(-)
diff -Nru a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c 2005-03-23 14:03:20 -05:00
+++ b/xen/arch/x86/mm.c 2005-03-23 14:03:20 -05:00
@@ -2398,8 +2398,7 @@
l1pte_propagate_from_guest(
d, &l1_pgentry_val(nl1e), &l1_pgentry_val(sl1e[i]));
- if ( unlikely(l1_pgentry_val(ol1e) & _PAGE_PRESENT) )
- put_page_from_l1e(ol1e, d);
+ put_page_from_l1e(ol1e, d);
}
unmap_domain_mem(pl1e);
@@ -2443,7 +2442,7 @@
struct domain *d = current->domain;
/* Aligned access only, thank you. */
- if ( (addr & (bytes-1)) != 0 )
+ if ( !access_ok(VERIFY_WRITE, addr, bytes) || ((addr & (bytes-1)) != 0) )
{
MEM_LOG("ptwr_emulate: Unaligned or bad size ptwr access (%d, %p)\n",
bytes, addr);
@@ -2481,7 +2480,8 @@
/* We are looking only for read-only mappings of p.t. pages. */
if ( ((pte & (_PAGE_RW | _PAGE_PRESENT)) != _PAGE_PRESENT) ||
- ((page->u.inuse.type_info & PGT_type_mask) != PGT_l1_page_table) )
+ ((page->u.inuse.type_info & PGT_type_mask) != PGT_l1_page_table) ||
+ (page_get_owner(page) != d) )
{
MEM_LOG("ptwr_emulate: Page is mistyped or bad pte (%p, %x)\n",
pte, page->u.inuse.type_info);
@@ -2501,6 +2501,7 @@
if ( cmpxchg((unsigned long *)pl1e, old, val) != old )
{
unmap_domain_mem(pl1e);
+ put_page_from_l1e(nl1e, d);
return X86EMUL_CMPXCHG_FAILED;
}
}
@@ -2526,8 +2527,7 @@
}
/* Finally, drop the old PTE. */
- if ( unlikely(l1_pgentry_val(ol1e) & _PAGE_PRESENT) )
- put_page_from_l1e(ol1e, d);
+ put_page_from_l1e(ol1e, d);
return X86EMUL_CONTINUE;
}
@@ -2587,7 +2587,8 @@
/* We are looking only for read-only mappings of p.t. pages. */
if ( ((pte & (_PAGE_RW | _PAGE_PRESENT)) != _PAGE_PRESENT) ||
- ((page->u.inuse.type_info & PGT_type_mask) != PGT_l1_page_table) )
+ ((page->u.inuse.type_info & PGT_type_mask) != PGT_l1_page_table) ||
+ (page_get_owner(page) != ed->domain) )
{
return 0;
}
-------------------------------------------------------
This SF.net email is sponsored by Microsoft Mobile & Embedded DevCon 2005
Attend MEDC 2005 May 9-12 in Vegas. Learn more about the latest Windows
Embedded(r) & Windows Mobile(tm) platforms, applications & content. Register
by 3/29 & save $300 http://ads.osdn.com/?ad_id=6883&alloc_id=15149&op=click
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/xen-changelog
|