Fw: Reg: Memory leaks Using OpenSSL API - Unsure

pauli at openssl.org pauli at openssl.org
Sun Apr 10 08:18:31 UTC 2022


Any chance of running your server under valgrind or similar?
This should make the leaks more concrete.


Pauli

On 10/4/22 6:07 pm, Ram Chandra via openssl-users wrote:
>
> Hi,
> I have recently started developing using OpenSSL and i am 
> confused/unclear about below topic.
>
> Request you to help me.
>
> I am running a DTLS Server which handles more than 1000 connections.
> The problem i am facing is every time I close connections and also 
> connect again I see there is some RAM memory utilization increases.
>
> I wonder there is a leak in memory from my below approach of calling 
> functions
> "Initialize_Sever_Context" ,
> "create_connexion" and
> "close_connexion".
>
> The exact code is too big to create actual scenario, so i just 
> outlined the steps.
>
> Pls let me know if any extra information is required?
>
> I am using OpenSSL version 1.1.1k on Linux.
>
> //connect_info structure user defined
> {
>  void* sll;
>  void* bio;
>  ....
> }array_of_connections
>
> *connect_info = &array_of_connections;
> // global
> SSL_CTX* server_ctx;
>
> Initialize_Sever_Context()
> {
>     // server_ctx is global
>     server_ctx = SSL_CTX_new(DTLS_server_method());
>     X509_VERIFY_PARAM *local_vpm = X509_VERIFY_PARAM_new()
>
>     //setting verify flags, cookie flags and cypher lists etc..
>     //....
>     SSL_CTX_set1_param(server_ctx, local_vpm);
> X509_VERIFY_PARAM_free(local_vpm);
> }
>
> create_connexion(connect_info)
> {
>     // server_ctx is global
>     ssl = SSL_new(server_ctx);
>     bio = BIO_new_dgram(handler, BIO_NOCLOSE); //not sure it is ok to 
> use BIO_CLOSE
>     ..
>     ..
>     SSL_set_bio(ssl, bio, bio);
>     connect_info->ssl = ssl;
>     connect_info->bio = bio;
>
> }
> //pre connection close
> handle_closed_connexions()
> {
>     for(conn = 1; conn<MAX_CONN;conn++)
>     {
>         close_connexion(connect_info[conn]);
>     }
> }
> // frees the existing closed connections and make SSL ready to handle 
> new connections
> close_connexion(connect_info)
> {
>     // store prev ssl objects
>     SLL *local_ssl = connect_info -> ssl;
>     // make setup ready for the next connexions
>     // and start listening
>     create_connexion(connect_info)
>
>     // free the previous closed connections
>     // frees the server_ctx also from inside
>     SSL_free(local_ssl);
> }
>
> Inside SSL_free we have BIO_free_all(s->rbio), BIO_free_all(s->rbio) 
> and BIO_CTX_free(s->ctx) and finally OPENSSL_free(s)
>
> As far as i understand when we do SSL_free, all the members(pointers) 
> inside SLL object are freed.
> So i expect the application to crash.(because "server_ctx" is a global 
> pointer which will be set to "s->ctx" through function SSL_new and 
> also freed by SLL_free and after free i am not setting
> server_ctx = NULL also not calling SSL_CTX_new(DTLS_server_method());)
>
> But my application is working fine.
>
> My doubt is , does OpenSSL cache the context detail inside SSL, some 
> where?
>
> or
>
> I Should set server_context to NULL and allocate memory for every new 
> connection which was closed before?
>
>
> Regards,
> Chand
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mta.openssl.org/pipermail/openssl-users/attachments/20220410/4ccc66c7/attachment-0001.htm>


More information about the openssl-users mailing list