From c42f21961b6ffab77acf5f3bad31ea2392979f6a Mon Sep 17 00:00:00 2001 From: Tim Deegan Date: Thu, 1 Dec 2011 14:17:16 +0000 Subject: [PATCH] x86/mm: Don't lose track of the log dirty bitmap hap_log_dirty_init unconditionally sets the top of the log dirty bitmap to INVALID_MFN. If there had been a bitmap allocated, it is then leaked, and the host crashes on an ASSERT when the domain is cleaned up. Signed-off-by: Tim Deegan Acked-by: Andres Lagar-Cavilla Committed-by: Tim Deegan --- xen/arch/x86/mm/paging.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/xen/arch/x86/mm/paging.c b/xen/arch/x86/mm/paging.c index bccd3c0734..bee3681671 100644 --- a/xen/arch/x86/mm/paging.c +++ b/xen/arch/x86/mm/paging.c @@ -595,7 +595,6 @@ void paging_log_dirty_init(struct domain *d, d->arch.paging.log_dirty.enable_log_dirty = enable_log_dirty; d->arch.paging.log_dirty.disable_log_dirty = disable_log_dirty; d->arch.paging.log_dirty.clean_dirty_bitmap = clean_dirty_bitmap; - d->arch.paging.log_dirty.top = _mfn(INVALID_MFN); } /* This function fress log dirty bitmap resources. */ @@ -617,6 +616,11 @@ int paging_domain_init(struct domain *d, unsigned int domcr_flags) mm_lock_init(&d->arch.paging.lock); + /* This must be initialized separately from the rest of the + * log-dirty init code as that can be called more than once and we + * don't want to leak any active log-dirty bitmaps */ + d->arch.paging.log_dirty.top = _mfn(INVALID_MFN); + /* The order of the *_init calls below is important, as the later * ones may rewrite some common fields. Shadow pagetables are the * default... */ -- 2.30.2