aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/openvpn/reliable.c5
-rw-r--r--src/openvpn/reliable.h4
-rw-r--r--src/openvpn/ssl.c24
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);