diff options
author | Ian Campbell <ian.campbell@citrix.com> | 2011-01-11 18:15:38 +0000 |
---|---|---|
committer | Ian Campbell <ian.campbell@citrix.com> | 2011-01-11 18:15:38 +0000 |
commit | 382571fcdea4ac28050cf47aa723a8d4c5cedf67 (patch) | |
tree | f30f6c857fd44fe70081c91799cee060c2c9a186 | |
parent | 63f600a36247a1f75bc3d8ae6f4baceb3e1b3ee0 (diff) | |
download | xen-382571fcdea4ac28050cf47aa723a8d4c5cedf67.tar.gz xen-382571fcdea4ac28050cf47aa723a8d4c5cedf67.tar.bz2 xen-382571fcdea4ac28050cf47aa723a8d4c5cedf67.zip |
libxl: do not leak front flexarray on error in libxl_create_pci_backend
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
-rw-r--r-- | tools/libxl/libxl_pci.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c index 15c0e33f64..e7312e2f48 100644 --- a/tools/libxl/libxl_pci.c +++ b/tools/libxl/libxl_pci.c @@ -224,17 +224,19 @@ parse_error: static int libxl_create_pci_backend(libxl__gc *gc, uint32_t domid, libxl_device_pci *pcidev, int num) { libxl_ctx *ctx = libxl__gc_owner(gc); - flexarray_t *front; - flexarray_t *back; + flexarray_t *front = NULL; + flexarray_t *back = NULL; libxl__device device; - int i; + int ret = ERROR_NOMEM, i; front = flexarray_make(16, 1); if (!front) - return ERROR_NOMEM; + goto out; back = flexarray_make(16, 1); if (!back) - return ERROR_NOMEM; + goto out; + + ret = 0; LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "Creating pci backend"); @@ -271,8 +273,11 @@ static int libxl_create_pci_backend(libxl__gc *gc, uint32_t domid, libxl_device_ libxl__xs_kvs_of_flexarray(gc, back, back->count), libxl__xs_kvs_of_flexarray(gc, front, front->count)); - flexarray_free(back); - flexarray_free(front); +out: + if (back) + flexarray_free(back); + if (front) + flexarray_free(front); return 0; } |