diff options
author | Steven Linsell <stevenx.linsell@intel.com> | 2016-03-20 23:00:13 +0000 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2016-03-21 16:57:34 +0000 |
commit | 55327ddfc13d9b9e48fb2d5287e9698a9589790c (patch) | |
tree | 85a7f89ddfeebfeafac9910d7f00ae013310ae5c /crypto | |
parent | 7188f1f650e1130dbf0574c8276c0eb8cdbf0617 (diff) | |
download | openssl-55327ddfc13d9b9e48fb2d5287e9698a9589790c.tar.gz |
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>
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/async/async_wait.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/crypto/async/async_wait.c b/crypto/async/async_wait.c index 94f1a6b4e0..ece995f4e9 100644 --- a/crypto/async/async_wait.c +++ b/crypto/async/async_wait.c @@ -63,20 +63,22 @@ ASYNC_WAIT_CTX *ASYNC_WAIT_CTX_new(void) void ASYNC_WAIT_CTX_free(ASYNC_WAIT_CTX *ctx) { struct fd_lookup_st *curr; + struct fd_lookup_st *next; if (ctx == NULL) return; curr = ctx->fds; while (curr != NULL) { - if (curr->del) { - /* This one has already been deleted so do nothing */ - curr = curr->next; - continue; + if (!curr->del) { + /* Only try and cleanup if it hasn't been marked deleted */ + if (curr->cleanup != NULL) + curr->cleanup(ctx, curr->key, curr->fd, curr->custom_data); } - if (curr->cleanup != NULL) - 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); |