From: Arne Schwabe Date: Fri, 23 Oct 2020 11:34:29 +0000 (+0200) Subject: Align reliable_free with other free methods to accept NULL X-Git-Tag: v2.6_beta1~663 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2c8a9877617727438cdd874ecd38c04adebf53ad;p=thirdparty%2Fopenvpn.git Align reliable_free with other free methods to accept NULL 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 Acked-by: Gert Doering 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 --- diff --git a/src/openvpn/reliable.c b/src/openvpn/reliable.c index eae1e0cba..6c1f2da15 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 688c65c85..a84d42907 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 87b51d965..7a3eb146a 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);