vmdk: Fix local_err in vmdk_create

In vmdk_create and vmdk_create_extent, initialize local_err before using
it, and don't leak it on error.

Reported-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Fam Zheng 2014-05-28 11:38:58 +08:00 committed by Kevin Wolf
parent 675036e4da
commit c13959c745
1 changed files with 4 additions and 4 deletions

View File

@ -1534,7 +1534,7 @@ static int vmdk_create_extent(const char *filename, int64_t filesize,
int ret, i; int ret, i;
BlockDriverState *bs = NULL; BlockDriverState *bs = NULL;
VMDK4Header header; VMDK4Header header;
Error *local_err; Error *local_err = NULL;
uint32_t tmp, magic, grains, gd_sectors, gt_size, gt_count; uint32_t tmp, magic, grains, gd_sectors, gt_size, gt_count;
uint32_t *gd_buf = NULL; uint32_t *gd_buf = NULL;
int gd_buf_size; int gd_buf_size;
@ -1700,7 +1700,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options,
{ {
int idx = 0; int idx = 0;
BlockDriverState *new_bs = NULL; BlockDriverState *new_bs = NULL;
Error *local_err; Error *local_err = NULL;
char *desc = NULL; char *desc = NULL;
int64_t total_size = 0, filesize; int64_t total_size = 0, filesize;
const char *adapter_type = NULL; const char *adapter_type = NULL;
@ -1881,7 +1881,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options,
} else { } else {
ret = bdrv_create_file(filename, options, &local_err); ret = bdrv_create_file(filename, options, &local_err);
if (ret < 0) { if (ret < 0) {
error_setg_errno(errp, -ret, "Could not create image file"); error_propagate(errp, local_err);
goto exit; goto exit;
} }
} }
@ -1889,7 +1889,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options,
ret = bdrv_open(&new_bs, filename, NULL, NULL, ret = bdrv_open(&new_bs, filename, NULL, NULL,
BDRV_O_RDWR | BDRV_O_PROTOCOL, NULL, &local_err); BDRV_O_RDWR | BDRV_O_PROTOCOL, NULL, &local_err);
if (ret < 0) { if (ret < 0) {
error_setg_errno(errp, -ret, "Could not write description"); error_propagate(errp, local_err);
goto exit; goto exit;
} }
ret = bdrv_pwrite(new_bs, desc_offset, desc, desc_len); ret = bdrv_pwrite(new_bs, desc_offset, desc, desc_len);