Commit 55327ddf authored by Steven Linsell's avatar Steven Linsell Committed by Matt Caswell
Browse files

Fix memory leak where fdlookup linked list is not freed during


ASYNC_WAIT_CTX_free

Reviewed-by: default avatarRich Salz <rsalz@openssl.org>
Reviewed-by: default avatarMatt Caswell <matt@openssl.org>
parent 7188f1f6
Loading
Loading
Loading
Loading
+9 −7
Original line number Original line Diff line number Diff line
@@ -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);