On Wed, Oct 26, 2022 at 05:18:00PM -0500, Eric Blake wrote:
> -  if (conn->sockin >= 0)
> -    closesocket (conn->sockin);
> -  if (conn->sockout >= 0 && conn->sockin != conn->sockout)
> -    closesocket (conn->sockout);
> +  if (conn->sockout >= 0 && how == SHUT_WR) {
> +    if (conn->sockin == conn->sockout)
> +      shutdown (conn->sockout, how);
> +    else
> +      closesocket (conn->sockout);
> +    conn->sockout = -1;

Don't we leak conn->sockin, if how == SHUT_WR && conn->sockin == conn->sockout?

Rich.

> +  }
> +  else {
> +    if (conn->sockin >= 0)
> +      closesocket (conn->sockin);
> +    if (conn->sockout >= 0 && conn->sockin != conn->sockout)
> +      closesocket (conn->sockout);
> +  }
>  }
> diff --git a/server/crypto.c b/server/crypto.c
> index 1f605083..72486bf8 100644
> --- a/server/crypto.c
> +++ b/server/crypto.c
> @@ -412,7 +412,7 @@ crypto_send (const void *vbuf, size_t len, int flags)
>   * close, so this function ignores errors.
>   */
>  static void
> -crypto_close (void)
> +crypto_close (int how)
>  {
>    GET_CONN;
>    gnutls_session_t session = conn->crypto_session;
> @@ -420,17 +420,21 @@ crypto_close (void)
> 
>    assert (session != NULL);
> 
> -  gnutls_transport_get_int2 (session, &sockin, &sockout);
> +  if (how == SHUT_WR)
> +    gnutls_bye (session, GNUTLS_SHUT_WR);
> +  else {
> +    gnutls_transport_get_int2 (session, &sockin, &sockout);
> 
> -  gnutls_bye (session, GNUTLS_SHUT_RDWR);
> +    gnutls_bye (session, GNUTLS_SHUT_RDWR);
> 
> -  if (sockin >= 0)
> -    closesocket (sockin);
> -  if (sockout >= 0 && sockin != sockout)
> -    closesocket (sockout);
> +    if (sockin >= 0)
> +      closesocket (sockin);
> +    if (sockout >= 0 && sockin != sockout)
> +      closesocket (sockout);
> 
> -  gnutls_deinit (session);
> -  conn->crypto_session = NULL;
> +    gnutls_deinit (session);
> +    conn->crypto_session = NULL;
> +  }
>  }
> 
>  #ifdef WIN32
> -- 
> 2.37.3
> 
> _______________________________________________
> Libguestfs mailing list
> Libguestfs@redhat.com
> https://listman.redhat.com/mailman/listinfo/libguestfs

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top
_______________________________________________
Libguestfs mailing list
Libguestfs@redhat.com
https://listman.redhat.com/mailman/listinfo/libguestfs

Reply via email to