diff mbox

vmdk: Fix local_err in vmdk_create

Message ID 1401248338-29285-1-git-send-email-famz@redhat.com
State New
Headers show

Commit Message

Fam Zheng May 28, 2014, 3:38 a.m. UTC
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(-)

Comments

Markus Armbruster May 28, 2014, 7:31 a.m. UTC | #1
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>
Kevin Wolf May 28, 2014, 2:48 p.m. UTC | #2
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 mbox

Patch

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);