SSL_SESSION_FREE(3SSL)
π SSL_SESSION_FREE π β like, the whole SSL_SESSION lifecycle, bestie
okay so this is the manual page for the SSL_SESSION family in OpenSSL (that's the 3SSL section, iykyk). We're talking SSL_SESSION_new, SSL_SESSION_dup, SSL_SESSION_up_ref, and SSL_SESSION_free β creating, freeing, and managing SSL_SESSION structures. Refcount management, periodt. π
β¨ SYNOPSIS β¨
#include <openssl/ssl.h>
SSL_SESSION *SSL_SESSION_new(void);
SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src);
int SSL_SESSION_up_ref(SSL_SESSION *ses);
void SSL_SESSION_free(SSL_SESSION *session);
πΈ DESCRIPTION πΈ
SSL_SESSION_new()β makes a brand newSSL_SESSIONstructure and hands you back a pointer to it. Fresh out the box, no notes. β¨SSL_SESSION_dup()β makes a newSSL_SESSIONstructure that is a copy ofsrc. Lowkey important detail: the copy is not owned by any cache thatsrcmay have been in. So it's a free agent, okay?SSL_SESSION_up_ref()β bumps the reference count on theSSL_SESSIONstructure you pass in. Glow up for the refcount, fr fr. π«ΆSSL_SESSION_free()β decrements the reference count ofsession, and if that count has hit 0, it removes theSSL_SESSIONstructure pointed to bysessionand frees up the allocated memory. And ifsessionisNULL? Nothing happens. Nothing. Zero. Nada. π
π NOTES π
okay so here's the lore. π¦
SSL_SESSION objects get allocated when a TLS/SSL handshake operation is successfully completed. Depending on the settings β go check SSL_CTX_set_session_cache_mode(3) for that β the SSL_SESSION objects are internally referenced by the SSL_CTX and linked into its session cache.
And here's the plot twist: SSL objects may be using the SSL_SESSION object. Because a session may be reused, several SSL objects may be using one SSL_SESSION object at the same time. The way that multiple things can point at the same little guy... iconic but also terrifying. π
So it is crucial to keep the reference count (that's the usage information) correct, and to not delete an SSL_SESSION object that is still being used β because that may lead to program failures due to dangling pointers. And the messiest part? These failures may also appear delayed. Like, for example, when an SSL_SESSION object was completely freed because the reference count incorrectly became 0, but it is still referenced in the internal session cache and the cache list gets processed during a SSL_CTX_flush_sessions(3) operation. So it's giving time-bomb energy. π°οΈπ₯
π¨ bestie listen:SSL_SESSION_free()must only be called forSSL_SESSIONobjects for which the reference count was explicitly incremented β e.g. by callingSSL_get1_session(), seeSSL_get_session(3)β or when theSSL_SESSIONobject was generated outside a TLS handshake operation, e.g. by usingd2i_SSL_SESSION(3). It must not be called on otherSSL_SESSIONobjects, as this would cause incorrect reference counts and therefore program failures. Do not freestyle this one. π
β RETURN VALUES β
SSL_SESSION_newreturns a pointer to the newly allocatedSSL_SESSIONstructure, orNULLon error.SSL_SESSION_dupreturns a pointer to the new copy, orNULLon error.SSL_SESSION_up_refreturns1on success or0on error.
π SEE ALSO π
ssl(7), SSL_get_session(3), SSL_CTX_set_session_cache_mode(3), SSL_CTX_flush_sessions(3), d2i_SSL_SESSION(3)
Go read those too, bestie, they're all connected. It's giving unhinged extended universe. π
π HISTORY π
The SSL_SESSION_dup() function was added in OpenSSL 1.1.1.
π COPYRIGHT π
Copyright 2000-2023 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>.
and that's the whole page, no cap. π this was OpenSSL 4.0.3, dated 2026-09-29, straight from the 3SSL manual set β love that for us, mwah πβ¨
π¦ where this page comes from
- ubuntu stonking: libssl-doc 4.0.3-1ubuntu1 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms