From 5a879cfe15ae86d4b78bdd57f39c4a034842d73c Mon Sep 17 00:00:00 2001 From: Andrew Cooper Date: Fri, 29 Sep 2017 13:29:21 +0100 Subject: [PATCH] xen/gnttab: Clean up goto tangle in grant_table_init() MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit No functional change. Signed-off-by: Andrew Cooper Reviewed-by: Roger Pau Monné Reviewed-by: Juergen Gross --- xen/common/grant_table.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c index 71706f5cba..c36f0f868c 100644 --- a/xen/common/grant_table.c +++ b/xen/common/grant_table.c @@ -1732,60 +1732,60 @@ active_alloc_failed: static int grant_table_init(struct domain *d, struct grant_table *gt) { - int ret; + int ret = -ENOMEM; grant_write_lock(gt); if ( gt->active ) { ret = -EBUSY; - goto unlock; + goto out_no_cleanup; } /* Active grant table. */ gt->active = xzalloc_array(struct active_grant_entry *, max_nr_active_grant_frames); if ( gt->active == NULL ) - goto no_mem; + goto out; /* Tracking of mapped foreign frames table */ gt->maptrack = vzalloc(max_maptrack_frames * sizeof(*gt->maptrack)); if ( gt->maptrack == NULL ) - goto no_mem; + goto out; /* Shared grant table. */ gt->shared_raw = xzalloc_array(void *, max_grant_frames); if ( gt->shared_raw == NULL ) - goto no_mem; + goto out; /* Status pages for grant table - for version 2 */ gt->status = xzalloc_array(grant_status_t *, grant_to_status_frames(max_grant_frames)); if ( gt->status == NULL ) - goto no_mem; + goto out; ret = gnttab_init_arch(gt); if ( ret ) goto out; /* gnttab_grow_table() allocates a min number of frames, so 0 is okay. */ - if ( gnttab_grow_table(d, 0) ) - goto unlock; + ret = gnttab_grow_table(d, 0) ? 0 : -ENOMEM; - no_mem: - ret = -ENOMEM; out: - gnttab_destroy_arch(gt); - xfree(gt->status); - gt->status = NULL; - xfree(gt->shared_raw); - gt->shared_raw = NULL; - vfree(gt->maptrack); - gt->maptrack = NULL; - xfree(gt->active); - gt->active = NULL; + if ( ret ) + { + gnttab_destroy_arch(gt); + xfree(gt->status); + gt->status = NULL; + xfree(gt->shared_raw); + gt->shared_raw = NULL; + vfree(gt->maptrack); + gt->maptrack = NULL; + xfree(gt->active); + gt->active = NULL; + } - unlock: + out_no_cleanup: grant_write_unlock(gt); return ret; -- 2.30.2