diff options
author | Watson Ladd <watsonbladd@gmail.com> | 2023-04-27 10:14:51 -0700 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2023-05-12 10:23:29 +0200 |
commit | 9fdf9a44bbe3827fe653165a07281ccae8ab0947 (patch) | |
tree | b9c799dab66fd1e1098ed5e6c55c5eb461883985 | |
parent | 13069d0144096ef8cecc82fb7fcd1a1eed93d7a8 (diff) | |
download | openssl-new-9fdf9a44bbe3827fe653165a07281ccae8ab0947.tar.gz |
Clear ownership when duplicating sessions
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Todd Short <todd.short@me.com>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/20848)
-rw-r--r-- | ssl/ssl_sess.c | 3 | ||||
-rw-r--r-- | test/sslapitest.c | 4 |
2 files changed, 5 insertions, 2 deletions
diff --git a/ssl/ssl_sess.c b/ssl/ssl_sess.c index 28d6cc1f15..6d5e87f687 100644 --- a/ssl/ssl_sess.c +++ b/ssl/ssl_sess.c @@ -169,9 +169,10 @@ SSL_SESSION *ssl_session_dup(const SSL_SESSION *src, int ticket) dest->ticket_appdata = NULL; memset(&dest->ex_data, 0, sizeof(dest->ex_data)); - /* We deliberately don't copy the prev and next pointers */ + /* As the copy is not in the cache, we remove the associated pointers */ dest->prev = NULL; dest->next = NULL; + dest->owner = NULL; dest->references = 1; diff --git a/test/sslapitest.c b/test/sslapitest.c index eb5b5a5476..be1d742021 100644 --- a/test/sslapitest.c +++ b/test/sslapitest.c @@ -2285,7 +2285,9 @@ static int execute_test_session(int maxprot, int use_int_cache, */ if (use_int_cache && maxprot != TLS1_3_VERSION) { if (!TEST_ptr(tmp = SSL_SESSION_dup(sess2)) - || !TEST_true(SSL_CTX_remove_session(sctx, sess2))) + || !TEST_true(sess2->owner != NULL) + || !TEST_true(tmp->owner == NULL) + || !TEST_true(SSL_CTX_remove_session(sctx, sess2))) goto end; SSL_SESSION_free(sess2); } |