]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Align reliable_free with other free methods to accept NULL
authorArne Schwabe <arne@rfc2549.org>
Fri, 23 Oct 2020 11:34:29 +0000 (13:34 +0200)
committerGert Doering <gert@greenie.muc.de>
Sat, 24 Oct 2020 19:44:59 +0000 (21:44 +0200)
The semantic of most free methods is to free a pointer and all its
contents and also free the pointer itself. Align reliable_free to this
semantic.

Also clean up the other free uses in key_state_free.

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20201023113431.26691-3-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg21215.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
src/openvpn/reliable.c
src/openvpn/reliable.h
src/openvpn/ssl.c

index eae1e0cba35aefbbc05f3ab993712f4487ed0fa4..6c1f2da1540ec94d569ffc2fc189d87568f82ccc 100644 (file)
@@ -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? */
index 688c65c85d63ddbed8b4567bd9f20cb9db83cd49..a84d42907cdcc9ffbbe6e2ef62a1b458003fa663 100644 (file)
@@ -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.
  */
index 87b51d9650479758d14a8b861f4b15205bdf0518..7a3eb146a3650c4e5a1e53774c25caa0ff72e1df 100644 (file)
@@ -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);