Fix memory leak where fdlookup linked list is not freed during

ASYNC_WAIT_CTX_free

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
This commit is contained in:
Steven Linsell 2016-03-20 23:00:13 +00:00 committed by Matt Caswell
parent 7188f1f650
commit 55327ddfc1

View File

@ -63,20 +63,22 @@ ASYNC_WAIT_CTX *ASYNC_WAIT_CTX_new(void)
void ASYNC_WAIT_CTX_free(ASYNC_WAIT_CTX *ctx) void ASYNC_WAIT_CTX_free(ASYNC_WAIT_CTX *ctx)
{ {
struct fd_lookup_st *curr; struct fd_lookup_st *curr;
struct fd_lookup_st *next;
if (ctx == NULL) if (ctx == NULL)
return; return;
curr = ctx->fds; curr = ctx->fds;
while (curr != NULL) { while (curr != NULL) {
if (curr->del) { if (!curr->del) {
/* This one has already been deleted so do nothing */ /* Only try and cleanup if it hasn't been marked deleted */
curr = curr->next;
continue;
}
if (curr->cleanup != NULL) if (curr->cleanup != NULL)
curr->cleanup(ctx, curr->key, curr->fd, curr->custom_data); curr->cleanup(ctx, curr->key, curr->fd, curr->custom_data);
curr = curr->next; }
/* Always free the fd_lookup_st */
next = curr->next;
OPENSSL_free(curr);
curr = next;
} }
OPENSSL_free(ctx); OPENSSL_free(ctx);