From: Roger Pau Monné Date: Wed, 18 Jun 2014 13:52:25 +0000 (+0200) Subject: x86: prevent PVH Dom0 from having pages with more than one ref X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~4838 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=86104258d36a2d3b0c92aabd2147c731b792f501;p=xen.git x86: prevent PVH Dom0 from having pages with more than one ref On PV guests a reference is taken when a page gets added to the page tables, which makes pages added to the page tables have two references, but this is not suitable for PVH that doesn't use the PVMMU. In the PVH case only one reference has to be taken or else the page would not be freed when the memory of the domain is decreased. Signed-off-by: Roger Pau Monné Reviewed-by: Andrew Cooper --- diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c index ba42fc90e0..d4473c1bf8 100644 --- a/xen/arch/x86/domain_build.c +++ b/xen/arch/x86/domain_build.c @@ -1137,10 +1137,13 @@ int __init construct_dom0( L1_PROT : COMPAT_L1_PROT)); l1tab++; - page = mfn_to_page(mfn); - if ( (page->u.inuse.type_info == 0) && - !get_page_and_type(page, d, PGT_writable_page) ) - BUG(); + if ( !paging_mode_translate(d) ) + { + page = mfn_to_page(mfn); + if ( !page->u.inuse.type_info && + !get_page_and_type(page, d, PGT_writable_page) ) + BUG(); + } } if ( is_pv_32on64_domain(d) ) @@ -1300,7 +1303,7 @@ int __init construct_dom0( if ( get_gpfn_from_mfn(mfn) >= count ) { BUG_ON(is_pv_32bit_domain(d)); - if ( !page->u.inuse.type_info && + if ( !paging_mode_translate(d) && !page->u.inuse.type_info && !get_page_and_type(page, d, PGT_writable_page) ) BUG();