Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:GA
xen.8005
57b7447b-dont-permit-guest-to-populate-PoD-page...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 57b7447b-dont-permit-guest-to-populate-PoD-pages-for-itself.patch of Package xen.8005
# Commit 2a99aa99fc84a45f505f84802af56b006d14c52e # Date 2016-08-19 18:40:11 +0100 # Author Andrew Cooper <andrew.cooper3@citrix.com> # Committer Andrew Cooper <andrew.cooper3@citrix.com> xen/physmap: Do not permit a guest to populate PoD pages for itself PoD is supposed to be entirely transparent to guest, but this interface has been left exposed for a long time. The use of PoD requires careful co-ordination by the toolstack with the XENMEM_{get,set}_pod_target hypercalls, and xenstore ballooning target. The best a guest can do without toolstack cooperation crash. Furthermore, there are combinations of features (e.g. c/s c63868ff "libxl: disallow PCI device assignment for HVM guest when PoD is enabled") which a toolstack might wish to explicitly prohibit (in this case, because the two simply don't function in combination). In such cases, the guest mustn't be able to subvert the configuration chosen by the toolstack. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Jan Beulich <jbeulich@suse.com> --- a/xen/common/memory.c +++ b/xen/common/memory.c @@ -143,14 +143,14 @@ static void populate_physmap(struct memo struct page_info *page; unsigned long i, j; xen_pfn_t gpfn, mfn; - struct domain *d = a->domain; + struct domain *d = a->domain, *curr_d = current->domain; if ( !guest_handle_subrange_okay(a->extent_list, a->nr_done, a->nr_extents-1) ) return; if ( a->extent_order > (a->memflags & MEMF_populate_on_demand ? MAX_ORDER : - max_order(current->domain)) ) + max_order(curr_d)) ) return; for ( i = a->nr_done; i < a->nr_extents; i++ ) @@ -166,6 +166,10 @@ static void populate_physmap(struct memo if ( a->memflags & MEMF_populate_on_demand ) { + /* Disallow populating PoD pages on oneself. */ + if ( d == curr_d ) + goto out; + if ( guest_physmap_mark_populate_on_demand(d, gpfn, a->extent_order) < 0 ) goto out;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor