From: Andrew Cooper Date: Thu, 20 Nov 2014 16:38:46 +0000 (+0100) Subject: x86/mm: fix a reference counting error in MMU_MACHPHYS_UPDATE X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~4071 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=6913fa31fa898f45ecc3b00e2397b8ebc75c8df4;p=xen.git x86/mm: fix a reference counting error in MMU_MACHPHYS_UPDATE Any domain which can pass the XSM check against a translated guest can cause a page reference to be leaked. While shuffling the order of checks, drop the quite-pointless MEM_LOG(). This brings the check in line with similar checks in the vicinity. Discovered while reviewing the XSA-109/110 followup series. This is XSA-113. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich Reviewed-by: Tim Deegan --- diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 8ee9938061..3e3353cb48 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -3619,6 +3619,12 @@ long do_mmu_update( case MMU_MACHPHYS_UPDATE: + if ( unlikely(paging_mode_translate(pg_owner)) ) + { + rc = -EINVAL; + break; + } + mfn = req.ptr >> PAGE_SHIFT; gpfn = req.val; @@ -3638,13 +3644,6 @@ long do_mmu_update( break; } - if ( unlikely(paging_mode_translate(pg_owner)) ) - { - MEM_LOG("Mach-phys update on auto-translate guest"); - rc = -EINVAL; - break; - } - set_gpfn_from_mfn(mfn, gpfn); paging_mark_dirty(pg_owner, mfn);