From: Andrew Cooper Date: Fri, 29 Sep 2017 12:29:21 +0000 (+0100) Subject: xen/gnttab: Clean up goto tangle in grant_table_init() X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~1291 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=5a879cfe15ae86d4b78bdd57f39c4a034842d73c;p=xen.git xen/gnttab: Clean up goto tangle in grant_table_init() No functional change. Signed-off-by: Andrew Cooper Reviewed-by: Roger Pau Monné Reviewed-by: Juergen Gross --- 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;