diff mbox series

qemu-nbd: Fix a memleak in qemu_nbd_client_list()

Message ID 20201130123651.17543-1-alex.chen@huawei.com (mailing list archive)
State New, archived
Headers show
Series qemu-nbd: Fix a memleak in qemu_nbd_client_list() | expand

Commit Message

Alex Chen Nov. 30, 2020, 12:36 p.m. UTC
When the qio_channel_socket_connect_sync() fails
we should goto 'out' label to free the 'sioc' instead of return.

Reported-by: Euler Robot <euler.robot@huawei.com>
Signed-off-by: Alex Chen <alex.chen@huawei.com>
---
 qemu-nbd.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Alberto Garcia Nov. 30, 2020, 1:05 p.m. UTC | #1
On Mon 30 Nov 2020 01:36:51 PM CET, Alex Chen wrote:
> When the qio_channel_socket_connect_sync() fails
> we should goto 'out' label to free the 'sioc' instead of return.
>
> Reported-by: Euler Robot <euler.robot@huawei.com>
> Signed-off-by: Alex Chen <alex.chen@huawei.com>

Reviewed-by: Alberto Garcia <berto@igalia.com>

Berto
Eric Blake Nov. 30, 2020, 6:54 p.m. UTC | #2
On 11/30/20 6:36 AM, Alex Chen wrote:
> When the qio_channel_socket_connect_sync() fails
> we should goto 'out' label to free the 'sioc' instead of return.
> 
> Reported-by: Euler Robot <euler.robot@huawei.com>
> Signed-off-by: Alex Chen <alex.chen@huawei.com>
> ---
>  qemu-nbd.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

A local leak, but the only caller of qemu_nbd_client_list() is main()
which returns the value and thereby exits the program, so it is
inconsequential in the bigger picture.  I'll defer this to 6.0, and pick
it up through my NBD tree once that opens.

> 
> diff --git a/qemu-nbd.c b/qemu-nbd.c
> index a7075c5419..47587a709e 100644
> --- a/qemu-nbd.c
> +++ b/qemu-nbd.c
> @@ -181,7 +181,7 @@ static int qemu_nbd_client_list(SocketAddress *saddr, QCryptoTLSCreds *tls,
>      sioc = qio_channel_socket_new();
>      if (qio_channel_socket_connect_sync(sioc, saddr, &err) < 0) {
>          error_report_err(err);
> -        return EXIT_FAILURE;
> +        goto out;
>      }
>      rc = nbd_receive_export_list(QIO_CHANNEL(sioc), tls, hostname, &list,
>                                   &err);
>
diff mbox series

Patch

diff --git a/qemu-nbd.c b/qemu-nbd.c
index a7075c5419..47587a709e 100644
--- a/qemu-nbd.c
+++ b/qemu-nbd.c
@@ -181,7 +181,7 @@  static int qemu_nbd_client_list(SocketAddress *saddr, QCryptoTLSCreds *tls,
     sioc = qio_channel_socket_new();
     if (qio_channel_socket_connect_sync(sioc, saddr, &err) < 0) {
         error_report_err(err);
-        return EXIT_FAILURE;
+        goto out;
     }
     rc = nbd_receive_export_list(QIO_CHANNEL(sioc), tls, hostname, &list,
                                  &err);