diff options
author | Tim Deegan <tim@xen.org> | 2011-10-20 15:36:01 +0100 |
---|---|---|
committer | Tim Deegan <tim@xen.org> | 2011-10-20 15:36:01 +0100 |
commit | a8a8a52a27513b35d1c6aa2d542074f99849ac3d (patch) | |
tree | 06a67d17de16c74aa355d64e05f2114b14224555 | |
parent | 6123e225555d46d9f2666416f93ef9e3d3e1a7cc (diff) | |
download | xen-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.c | 9 |
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, |