diff mbox series

qga-win: fix leaks of build_guest_disk_info()

Message ID 20181103130143.7179-1-marcandre.lureau@redhat.com
State New
Headers show
Series qga-win: fix leaks of build_guest_disk_info() | expand

Commit Message

Marc-André Lureau Nov. 3, 2018, 1:01 p.m. UTC
Introduced in commit b1ba8890e63ce9432c41c5c3fc229f54c87c9c99, vol_h
handle should be closed, and "out" cleanup should be done after
DeviceIoControl() fails.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 qga/commands-win32.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Philippe Mathieu-Daudé Nov. 4, 2018, 10:30 p.m. UTC | #1
On 3/11/18 14:01, Marc-André Lureau wrote:
> Introduced in commit b1ba8890e63ce9432c41c5c3fc229f54c87c9c99, vol_h
> handle should be closed, and "out" cleanup should be done after
> DeviceIoControl() fails.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> ---
>   qga/commands-win32.c | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> index ef1d7d48d2..62e1b51dfe 100644
> --- a/qga/commands-win32.c
> +++ b/qga/commands-win32.c
> @@ -797,7 +797,7 @@ static GuestDiskAddressList *build_guest_disk_info(char *guid, Error **errp)
>                       0, extents, size, NULL, NULL)) {
>                   error_setg_win32(errp, GetLastError(),
>                       "failed to get disk extents");
> -                return NULL;
> +                goto out;
>               }
>           } else if (last_err == ERROR_INVALID_FUNCTION) {
>               /* Possibly CD-ROM or a shared drive. Try to pass the volume */
> @@ -855,6 +855,9 @@ static GuestDiskAddressList *build_guest_disk_info(char *guid, Error **errp)
>   
>   
>   out:
> +    if (vol_h != INVALID_HANDLE_VALUE) {
> +        CloseHandle(vol_h);
> +    }
>       qapi_free_GuestDiskAddress(disk);
>       g_free(extents);
>       g_free(name);
>
Michael Roth Nov. 9, 2018, 2:38 p.m. UTC | #2
Quoting Marc-André Lureau (2018-11-03 08:01:43)
> Introduced in commit b1ba8890e63ce9432c41c5c3fc229f54c87c9c99, vol_h
> handle should be closed, and "out" cleanup should be done after
> DeviceIoControl() fails.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Thanks, applied to qga tree:
  https://github.com/mdroth/qemu/commits/qga

> ---
>  qga/commands-win32.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> index ef1d7d48d2..62e1b51dfe 100644
> --- a/qga/commands-win32.c
> +++ b/qga/commands-win32.c
> @@ -797,7 +797,7 @@ static GuestDiskAddressList *build_guest_disk_info(char *guid, Error **errp)
>                      0, extents, size, NULL, NULL)) {
>                  error_setg_win32(errp, GetLastError(),
>                      "failed to get disk extents");
> -                return NULL;
> +                goto out;
>              }
>          } else if (last_err == ERROR_INVALID_FUNCTION) {
>              /* Possibly CD-ROM or a shared drive. Try to pass the volume */
> @@ -855,6 +855,9 @@ static GuestDiskAddressList *build_guest_disk_info(char *guid, Error **errp)
> 
> 
>  out:
> +    if (vol_h != INVALID_HANDLE_VALUE) {
> +        CloseHandle(vol_h);
> +    }
>      qapi_free_GuestDiskAddress(disk);
>      g_free(extents);
>      g_free(name);
> -- 
> 2.19.1.708.g4ede3d42df
>
diff mbox series

Patch

diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index ef1d7d48d2..62e1b51dfe 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -797,7 +797,7 @@  static GuestDiskAddressList *build_guest_disk_info(char *guid, Error **errp)
                     0, extents, size, NULL, NULL)) {
                 error_setg_win32(errp, GetLastError(),
                     "failed to get disk extents");
-                return NULL;
+                goto out;
             }
         } else if (last_err == ERROR_INVALID_FUNCTION) {
             /* Possibly CD-ROM or a shared drive. Try to pass the volume */
@@ -855,6 +855,9 @@  static GuestDiskAddressList *build_guest_disk_info(char *guid, Error **errp)
 
 
 out:
+    if (vol_h != INVALID_HANDLE_VALUE) {
+        CloseHandle(vol_h);
+    }
     qapi_free_GuestDiskAddress(disk);
     g_free(extents);
     g_free(name);