mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-09-13 11:15:08 +00:00
Avoid double-free in daemon client cleanup code
This commit is contained in:
parent
8a1a2ac558
commit
6c3ef35064
@ -1,3 +1,8 @@
|
|||||||
|
Fri May 29 15:34:30 BST 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
|
* qemud/qemud.c: Set free'd variables to NULL to avoid potential
|
||||||
|
double-free() scenario when client unexpectedly closes connection
|
||||||
|
|
||||||
Fri May 29 15:26:30 BST 2009 Daniel P. Berrange <berrange@redhat.com>
|
Fri May 29 15:26:30 BST 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
Win32 portability fixes
|
Win32 portability fixes
|
||||||
|
@ -1378,7 +1378,10 @@ static int qemudDispatchServer(struct qemud_server *server, struct qemud_socket
|
|||||||
* jobs have finished, then clean it up elsehwere
|
* jobs have finished, then clean it up elsehwere
|
||||||
*/
|
*/
|
||||||
void qemudDispatchClientFailure(struct qemud_client *client) {
|
void qemudDispatchClientFailure(struct qemud_client *client) {
|
||||||
|
if (client->watch != -1) {
|
||||||
virEventRemoveHandleImpl(client->watch);
|
virEventRemoveHandleImpl(client->watch);
|
||||||
|
client->watch = -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Deregister event delivery callback */
|
/* Deregister event delivery callback */
|
||||||
if(client->conn) {
|
if(client->conn) {
|
||||||
@ -1387,13 +1390,22 @@ void qemudDispatchClientFailure(struct qemud_client *client) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if HAVE_SASL
|
#if HAVE_SASL
|
||||||
if (client->saslconn) sasl_dispose(&client->saslconn);
|
if (client->saslconn) {
|
||||||
|
sasl_dispose(&client->saslconn);
|
||||||
|
client->saslconn = NULL;
|
||||||
|
}
|
||||||
free(client->saslUsername);
|
free(client->saslUsername);
|
||||||
|
client->saslUsername = NULL;
|
||||||
#endif
|
#endif
|
||||||
if (client->tlssession) gnutls_deinit (client->tlssession);
|
if (client->tlssession) {
|
||||||
|
gnutls_deinit (client->tlssession);
|
||||||
|
client->tlssession = NULL;
|
||||||
|
}
|
||||||
|
if (client->fd != -1) {
|
||||||
close(client->fd);
|
close(client->fd);
|
||||||
client->fd = -1;
|
client->fd = -1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Caller must hold server lock */
|
/* Caller must hold server lock */
|
||||||
|
Loading…
Reference in New Issue
Block a user