Message ID | 1401248338-29285-1-git-send-email-famz@redhat.com |
---|---|
State | New |
Headers | show |
Fam Zheng <famz@redhat.com> writes: > 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> > --- > block/vmdk.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/block/vmdk.c b/block/vmdk.c > index 480ea37..2b38f61 100644 > --- a/block/vmdk.c > +++ b/block/vmdk.c > @@ -1534,7 +1534,7 @@ static int vmdk_create_extent(const char *filename, int64_t filesize, > int ret, i; > BlockDriverState *bs = NULL; > VMDK4Header header; > - Error *local_err; > + Error *local_err = NULL; > uint32_t tmp, magic, grains, gd_sectors, gt_size, gt_count; > uint32_t *gd_buf = NULL; > int gd_buf_size; > @@ -1700,7 +1700,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, > { > int idx = 0; > BlockDriverState *new_bs = NULL; > - Error *local_err; > + Error *local_err = NULL; > char *desc = NULL; > int64_t total_size = 0, filesize; > const char *adapter_type = NULL; > @@ -1881,7 +1881,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, > } else { > ret = bdrv_create_file(filename, options, &local_err); > if (ret < 0) { > - error_setg_errno(errp, -ret, "Could not create image file"); > + error_propagate(errp, local_err); > goto exit; > } > } > @@ -1889,7 +1889,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, > ret = bdrv_open(&new_bs, filename, NULL, NULL, > BDRV_O_RDWR | BDRV_O_PROTOCOL, NULL, &local_err); > if (ret < 0) { > - error_setg_errno(errp, -ret, "Could not write description"); > + error_propagate(errp, local_err); > goto exit; > } > ret = bdrv_pwrite(new_bs, desc_offset, desc, desc_len); local_err and error_propagate() are actually superfluous, but I'll fix that on top, along with many other instances. Reviewed-by: Markus Armbruster <armbru@redhat.com>
Am 28.05.2014 um 09:31 hat Markus Armbruster geschrieben: > Fam Zheng <famz@redhat.com> writes: > > > 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> > > --- > > block/vmdk.c | 8 ++++---- > > 1 file changed, 4 insertions(+), 4 deletions(-) > local_err and error_propagate() are actually superfluous, but I'll fix > that on top, along with many other instances. What should really be fixed is that bdrv_open/create_file() return an -errno int in addition to using Error. > Reviewed-by: Markus Armbruster <armbru@redhat.com> Thanks, applied to the block branch. Kevin
diff --git a/block/vmdk.c b/block/vmdk.c index 480ea37..2b38f61 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@ -1534,7 +1534,7 @@ static int vmdk_create_extent(const char *filename, int64_t filesize, int ret, i; BlockDriverState *bs = NULL; VMDK4Header header; - Error *local_err; + Error *local_err = NULL; uint32_t tmp, magic, grains, gd_sectors, gt_size, gt_count; uint32_t *gd_buf = NULL; int gd_buf_size; @@ -1700,7 +1700,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, { int idx = 0; BlockDriverState *new_bs = NULL; - Error *local_err; + Error *local_err = NULL; char *desc = NULL; int64_t total_size = 0, filesize; const char *adapter_type = NULL; @@ -1881,7 +1881,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, } else { ret = bdrv_create_file(filename, options, &local_err); if (ret < 0) { - error_setg_errno(errp, -ret, "Could not create image file"); + error_propagate(errp, local_err); goto exit; } } @@ -1889,7 +1889,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, ret = bdrv_open(&new_bs, filename, NULL, NULL, BDRV_O_RDWR | BDRV_O_PROTOCOL, NULL, &local_err); if (ret < 0) { - error_setg_errno(errp, -ret, "Could not write description"); + error_propagate(errp, local_err); goto exit; } ret = bdrv_pwrite(new_bs, desc_offset, desc, desc_len);
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> --- block/vmdk.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)