From: kaf24@firebug.cl.cam.ac.uk Date: Thu, 13 Apr 2006 09:12:16 +0000 (+0100) Subject: Unmap shadow vtable when freeing shadow table in free_shadow_pages(). X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~16158^2~2^2~40 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=5c0d85e6799f7b3184d0c75ab07c80ecdc7bfb3d;p=xen.git Unmap shadow vtable when freeing shadow table in free_shadow_pages(). Signed-off-by: Xin Li --- diff --git a/xen/arch/x86/shadow32.c b/xen/arch/x86/shadow32.c index 0af335f623..458bb99555 100644 --- a/xen/arch/x86/shadow32.c +++ b/xen/arch/x86/shadow32.c @@ -583,6 +583,13 @@ static void free_shadow_pages(struct domain *d) { put_shadow_ref(pagetable_get_pfn(v->arch.shadow_table)); v->arch.shadow_table = mk_pagetable(0); + + if ( shadow_mode_external(d) ) + { + if ( v->arch.shadow_vtable ) + unmap_domain_page_global(v->arch.shadow_vtable); + v->arch.shadow_vtable = NULL; + } } if ( v->arch.monitor_shadow_ref ) diff --git a/xen/arch/x86/shadow_public.c b/xen/arch/x86/shadow_public.c index 58edcb552a..eee8fadb3e 100644 --- a/xen/arch/x86/shadow_public.c +++ b/xen/arch/x86/shadow_public.c @@ -898,6 +898,13 @@ void free_shadow_pages(struct domain *d) { put_shadow_ref(pagetable_get_pfn(v->arch.shadow_table)); v->arch.shadow_table = mk_pagetable(0); + + if ( shadow_mode_external(d) ) + { + if ( v->arch.shadow_vtable ) + unmap_domain_page_global(v->arch.shadow_vtable); + v->arch.shadow_vtable = NULL; + } } if ( v->arch.monitor_shadow_ref )