X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=ssl%2Fssl_sess.c;h=4dddf627cd62e33eb68f068e53a1539c1257fd2a;hp=681499f08aa6832f8511bd37c6537c2ab9e1af20;hb=b7cfcfb7f8e17c17f457b3384010eb027f3aad72;hpb=06556a1744dced40a2a77d7b6e4bb73f6e611b8d diff --git a/ssl/ssl_sess.c b/ssl/ssl_sess.c index 681499f08a..4dddf627cd 100644 --- a/ssl/ssl_sess.c +++ b/ssl/ssl_sess.c @@ -69,7 +69,16 @@ static STACK *ssl_session_meth=NULL; SSL_SESSION *SSL_get_session(SSL *ssl) { - return(ssl->session); + SSL_SESSION *sess; + /* Need to lock this all up rather than just use CRYPTO_add so that + * somebody doesn't free ssl->session between when we check it's + * non-null and when we up the reference count. */ + CRYPTO_r_lock(CRYPTO_LOCK_SSL_SESSION); + sess = ssl->session; + if(sess) + sess->references++; + CRYPTO_r_unlock(CRYPTO_LOCK_SSL_SESSION); + return(sess); } int SSL_SESSION_get_ex_new_index(long argl, char *argp, int (*new_func)(),