[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [XEN] Allow add_to_physmap to be applied to DOMID_SELF.
# HG changeset patch # User kfraser@xxxxxxxxxxxxxxxxxxxxx # Node ID 43ff88825b1a1ac82e43a80600ec84afe4826acf # Parent d7242c3a29064bae094d50ffca8cc99efd6dbc84 [XEN] Allow add_to_physmap to be applied to DOMID_SELF. Also sanitise handling of existing mappings of Xen heap frames. Signed-off-by: Steven Smith <ssmith@xxxxxxxxxxxxx> Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> --- xen/arch/x86/mm.c | 23 +++++++++++++++++++---- 1 files changed, 19 insertions(+), 4 deletions(-) diff -r d7242c3a2906 -r 43ff88825b1a xen/arch/x86/mm.c --- a/xen/arch/x86/mm.c Thu Aug 03 14:02:29 2006 +0100 +++ b/xen/arch/x86/mm.c Thu Aug 03 14:20:45 2006 +0100 @@ -2976,13 +2976,20 @@ long arch_memory_op(int op, XEN_GUEST_HA case XENMEM_add_to_physmap: { struct xen_add_to_physmap xatp; - unsigned long mfn = 0, gpfn; + unsigned long prev_mfn, mfn = 0, gpfn; struct domain *d; if ( copy_from_guest(&xatp, arg, 1) ) return -EFAULT; - if ( (d = find_domain_by_id(xatp.domid)) == NULL ) + if ( xatp.domid == DOMID_SELF ) + { + d = current->domain; + get_knownalive_domain(d); + } + else if ( !IS_PRIV(current->domain) ) + return -EPERM; + else if ( (d = find_domain_by_id(xatp.domid)) == NULL ) return -ESRCH; switch ( xatp.space ) @@ -3008,8 +3015,16 @@ long arch_memory_op(int op, XEN_GUEST_HA LOCK_BIGLOCK(d); /* Remove previously mapped page if it was present. */ - if ( mfn_valid(gmfn_to_mfn(d, xatp.gpfn)) ) - guest_remove_page(d, xatp.gpfn); + prev_mfn = gmfn_to_mfn(d, xatp.gpfn); + if ( mfn_valid(prev_mfn) ) + { + if ( IS_XEN_HEAP_FRAME(mfn_to_page(prev_mfn)) ) + /* Xen heap frames are simply unhooked from this phys slot. */ + guest_physmap_remove_page(d, xatp.gpfn, prev_mfn); + else + /* Normal domain memory is freed, to avoid leaking memory. */ + guest_remove_page(d, xatp.gpfn); + } /* Unmap from old location, if any. */ gpfn = get_gpfn_from_mfn(mfn); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |