diff options
-rw-r--r-- | src/openvpn/reliable.c | 5 | ||||
-rw-r--r-- | src/openvpn/reliable.h | 4 | ||||
-rw-r--r-- | src/openvpn/ssl.c | 24 |
3 files changed, 12 insertions, 21 deletions
diff --git a/src/openvpn/reliable.c b/src/openvpn/reliable.c index eae1e0c..6c1f2da 100644 --- a/src/openvpn/reliable.c +++ b/src/openvpn/reliable.c @@ -326,12 +326,17 @@ reliable_init(struct reliable *rel, int buf_size, int offset, int array_size, bo void reliable_free(struct reliable *rel) { + if (!rel) + { + return; + } int i; for (i = 0; i < rel->size; ++i) { struct reliable_entry *e = &rel->array[i]; free_buf(&e->buf); } + free(rel); } /* no active buffers? */ diff --git a/src/openvpn/reliable.h b/src/openvpn/reliable.h index 688c65c..a84d429 100644 --- a/src/openvpn/reliable.h +++ b/src/openvpn/reliable.h @@ -192,7 +192,9 @@ bool reliable_ack_write(struct reliable_ack *ack, void reliable_init(struct reliable *rel, int buf_size, int offset, int array_size, bool hold); /** - * Free allocated memory associated with a reliable structure. + * Free allocated memory associated with a reliable structure and the pointer + * itself. + * Does nothing if rel is NULL. * * @param rel The reliable structured to clean up. */ diff --git a/src/openvpn/ssl.c b/src/openvpn/ssl.c index 87b51d9..7a3eb14 100644 --- a/src/openvpn/ssl.c +++ b/src/openvpn/ssl.c @@ -969,27 +969,11 @@ key_state_free(struct key_state *ks, bool clear) free_buf(&ks->ack_write_buf); buffer_list_free(ks->paybuf); - if (ks->send_reliable) - { - reliable_free(ks->send_reliable); - free(ks->send_reliable); - } - - if (ks->rec_reliable) - { - reliable_free(ks->rec_reliable); - free(ks->rec_reliable); - } + reliable_free(ks->send_reliable); + reliable_free(ks->rec_reliable); - if (ks->rec_ack) - { - free(ks->rec_ack); - } - - if (ks->key_src) - { - free(ks->key_src); - } + free(ks->rec_ack); + free(ks->key_src); packet_id_free(&ks->crypto_options.packet_id); |