aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Deegan <tim@xen.org>2011-10-20 15:36:01 +0100
committerTim Deegan <tim@xen.org>2011-10-20 15:36:01 +0100
commita8a8a52a27513b35d1c6aa2d542074f99849ac3d (patch)
tree06a67d17de16c74aa355d64e05f2114b14224555
parent6123e225555d46d9f2666416f93ef9e3d3e1a7cc (diff)
downloadxen-a8a8a52a27513b35d1c6aa2d542074f99849ac3d.tar.gz
xen-a8a8a52a27513b35d1c6aa2d542074f99849ac3d.tar.bz2
xen-a8a8a52a27513b35d1c6aa2d542074f99849ac3d.zip
x86/mm/p2m: don't leak state if nested-p2m init fails.
Signed-off-by: Tim Deegan <tim@xen.org>
-rw-r--r--xen/arch/x86/mm/p2m.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c
index 4a8688acb6..785ef963d3 100644
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -113,6 +113,7 @@ p2m_init_nestedp2m(struct domain *d)
int p2m_init(struct domain *d)
{
struct p2m_domain *p2m;
+ int rc;
p2m_get_hostp2m(d) = p2m = xzalloc(struct p2m_domain);
if ( p2m == NULL )
@@ -121,9 +122,11 @@ int p2m_init(struct domain *d)
/* Must initialise nestedp2m unconditionally
* since nestedhvm_enabled(d) returns false here.
- * (p2m_init runs too early for HVM_PARAM_* options)
- */
- return p2m_init_nestedp2m(d);
+ * (p2m_init runs too early for HVM_PARAM_* options) */
+ rc = p2m_init_nestedp2m(d);
+ if ( rc )
+ p2m_final_teardown(d);
+ return rc;
}
void p2m_change_entry_type_global(struct domain *d,