On 12/10/2010 07:29 PM, Eric Blake wrote:
* daemon/libvirtd.c (qemudFreeClient): Avoid a leak.
(qemudDispatchServer): Avoid null dereference.
---

I keep finding more of these.

  daemon/libvirtd.c |    5 +++--
  1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
index 791b3dc..2914f2f 100644
--- a/daemon/libvirtd.c
+++ b/daemon/libvirtd.c
@@ -1410,7 +1410,7 @@ static int qemudDispatchServer(struct qemud_server 
*server, struct qemud_socket
          /* Client is running as root, so disable auth */
          if (uid == 0) {
              VIR_INFO(_("Turn off polkit auth for privileged client pid %d from 
%s"),
-                     pid, addrstr);
+                     pid, client->addrstr);
              client->auth = REMOTE_AUTH_NONE;
          }
      }
@@ -1451,7 +1451,7 @@ static int qemudDispatchServer(struct qemud_server 
*server, struct qemud_socket
          } else {
              PROBE(CLIENT_TLS_FAIL, "fd=%d", client->fd);
              VIR_ERROR(_("TLS handshake failed for client %s: %s"),
-                      addrstr, gnutls_strerror (ret));
+                      client->addrstr, gnutls_strerror (ret));
              goto error;
          }
      }
@@ -2283,6 +2283,7 @@ static void qemudFreeClient(struct qemud_client *client) {
      if (client->conn)
          virConnectClose(client->conn);
      virMutexDestroy(&client->lock);
+    VIR_FREE(client->addrstr);
      VIR_FREE(client);
  }


ACK.

Have you looked into some of the other stuff in the qemud_client struct? For example, nothing inside #ifdef HAVE_SASL gets freed during qemudFreeClient(). Quickly looking at the use of those items, it appears it might be possible to be freeing up the client struct when one of those is non-NULL, but I didn't read very carefully...

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to