summaryrefslogtreecommitdiffstats
path: root/ssl
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2020-12-10 10:36:23 +0000
committerMatt Caswell <matt@openssl.org>2021-01-08 10:36:53 +0000
commit37d9e3d7fdfbe7713adcdeca55b1303c6ad8dc12 (patch)
treec5875b32e152bf35429b65b57978224cb0f77012 /ssl
parenta953f26dba5dadf8ac69c6fcbf71ebe3efba9407 (diff)
Ensure DTLS free functions can handle NULL
Our free functions should be able to deal with the case where the object being freed is NULL. This turns out to not be quite the case for DTLS related objects. Fixes #13649 Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org> (Merged from https://github.com/openssl/openssl/pull/13655) (cherry picked from commit d0afb30ef3950cacff50ec539e90073b95a276df)
Diffstat (limited to 'ssl')
-rw-r--r--ssl/d1_lib.c9
-rw-r--r--ssl/record/rec_layer_d1.c3
2 files changed, 8 insertions, 4 deletions
diff --git a/ssl/d1_lib.c b/ssl/d1_lib.c
index 2a15ee8ad9..8874bed353 100644
--- a/ssl/d1_lib.c
+++ b/ssl/d1_lib.c
@@ -142,10 +142,11 @@ void dtls1_free(SSL *s)
ssl3_free(s);
- dtls1_clear_queues(s);
-
- pqueue_free(s->d1->buffered_messages);
- pqueue_free(s->d1->sent_messages);
+ if (s->d1 != NULL) {
+ dtls1_clear_queues(s);
+ pqueue_free(s->d1->buffered_messages);
+ pqueue_free(s->d1->sent_messages);
+ }
OPENSSL_free(s->d1);
s->d1 = NULL;
diff --git a/ssl/record/rec_layer_d1.c b/ssl/record/rec_layer_d1.c
index e56c6b9595..d0cb72d757 100644
--- a/ssl/record/rec_layer_d1.c
+++ b/ssl/record/rec_layer_d1.c
@@ -46,6 +46,9 @@ int DTLS_RECORD_LAYER_new(RECORD_LAYER *rl)
void DTLS_RECORD_LAYER_free(RECORD_LAYER *rl)
{
+ if (rl->d == NULL)
+ return;
+
DTLS_RECORD_LAYER_clear(rl);
pqueue_free(rl->d->unprocessed_rcds.q);
pqueue_free(rl->d->processed_rcds.q);