Hello,

yes, I meant to have a module parameter that controls whether to
initialize it once and reuse it vs initialize ctx per process.

Thanks,
Daniel

On 15.05.24 17:38, Henning Westerholt wrote:
>
> Hello Xenofon,
>
>  
>
> thanks for the additional information regarding the load_crl(..)
> function. Regarding the question about making it configurable, I think
> the idea was to have a new configuration parameter to disable the SSL
> context duplication per process, to make it easier testable and
> provide a way to deactivate if its makes problems. It could be then
> maybe made the default later on, if its works stable. It will be
> certainly some code duplication, but you can probably comment better
> how easy or difficult it could be implemented.
>
>  
>
> Cheers,
>
>  
>
> Henning
>
>  
>
> -- 
>
> Henning Westerholt – https://skalatan.de/blog/ <https://skalatan.de/blog/>
>
> Kamailio services – https://gilawa.com <https://gilawa.com/>
>
>  
>
> *From:*Xenofon Karamanos via sr-dev <sr-dev@lists.kamailio.org>
> *Sent:* Dienstag, 14. Mai 2024 15:54
> *To:* Kamailio (SER) - Development Mailing List
> <sr-dev@lists.kamailio.org>; mico...@gmail.com
> *Cc:* Xenofon Karamanos <x...@gilawa.com>
> *Subject:* [sr-dev] Re: TLS.reload and memory usage of SSL_CTX structs
>
>  
>
> Hello Daniel,
>
>  
>
> Thanks for the feedback!
>
>  
>
> Maybe i should have explained better regarding the leak. Indeed, i
> couldn't clearly identify the leak itself but there is an
> indication that the leak is happening in the
> SSL_CTX_load_verify_locations() function.
>
>  
>
> When i comment out that part of the load_crl() function there is no
> more exhaustion of memory, so it's probably something SSL related. 
>
>  
>
> Multiple issues suggest this also, look at:
>
> https://groups.google.com/g/envoy-dev/c/JnWnH6HcsDU
>
> https://github.com/pyca/pyopenssl/issues/1120
>
> https://mta.openssl.org/pipermail/openssl-users/2015-April/001255.html
>
> https://www.mail-archive.com/openssl-users@openssl.org/msg66240.html
>
> https://www.mail-archive.com/openssl-users@openssl.org/msg57199.html
>
> https://groups.google.com/g/mailing.openssl.users/c/R7bzJx167V4/m/lAGAPcDVmSMJ
>
> https://github.com/twisted/twisted/issues/12125
>
> https://stackoverflow.com/questions/29845527/how-to-properly-uninitialize-openssl
>
>  
>
> But i can't say for sure because the exact same function is called for
> CA list (maybe exhaustion here is much slower). 
>
>  
>
> I don't know the internal of SSL but when i enable the memory debugs,
> i see a lot of mallocs and reallocs in that call, and no free() for
> the respective memories when reloading each new tls.reload. Freeing()
> happens only when kamailio is terminated.
>
>  
>
> The idea of reusing instead of recreating came from this
> https://stackoverflow.com/questions/67868098/how-to-duplicate-a-ssl-ctx-object-in-a-tls-application.
>  
>
>  
>
> >>  (e.g., by libssl internally on handling traffic)
>
>  
>
> SSL_CTX should not be chagned once you have initialized an SSL
> connection according to this
> https://github.com/openssl/openssl/discussions/24203. maybe it was
> never needed but then again i am not deeply familiar with how kamailio
> uses these ctx.
>
>  
>
> Make configurable what? whether to initialize it once and reuse it vs
> initialize per process?
>
>  
>
> Thanks,
>
> Xenofon
>
> ------------------------------------------------------------------------
>
> *From:* Daniel-Constantin Mierla <mico...@gmail.com>
> *Sent:* Tuesday, May 14, 2024 15:05
> *To:* Kamailio (SER) - Development Mailing List
> <sr-dev@lists.kamailio.org>
> *Cc:* Xenofon Karamanos <x...@gilawa.com>
> *Subject:* Re: [sr-dev] TLS.reload and memory usage of SSL_CTX structs
>
>  
>
> Hello,
>
>  
>
> thanks for digging in it!
>
>  
>
> As I understand, this is somehow first about reducing the size of used
> memory, not clearly identifying the leak itself.
>
>  
>
> The duplication done per process was to avoid races if local changes
> has to be performed (e.g., by libssl internally on handling traffic),
> but maybe with the libssl3.x and new threading approach is no longer
> needed, if ever was necessary.
>
>  
>
> What I would suggest is to make it configurable for now, so in case
> behaviour becomes unstable on high load, one can switch between modes.
>
>  
>
> Cheers,
> Daniel
>
>  
>
> On 14.05.24 10:36, Xenofon Karamanos via sr-dev wrote:
>
>     Hello all,
>
>      
>
>     I am currently looking into issue
>     https://github.com/kamailio/kamailio/issues/3823 regarding the
>     tls.reload and the constant increase in memory usage when it's called.
>
>      
>
>     I tried to look something up related to CRL and related functions
>     for what causing it but nothing to obvious. The only culprit i
>     could find was this function call in  SSL_verify_load_locations in
>     load_crl()
>     
> <https://github.com/kamailio/kamailio/blob/9c2705b566103f4fad0cad63bc1e36ba3cca621f/src/modules/tls/tls_domain.c#L674-L679>.
>     But the same exact function is also called in load_ca_list() with
>     no such behaviour. 
>
>      
>
>     Next thing i notice, is that on the first rpc call of tls.reload,
>     there is a "significant" memory allocation. 
>
>     What i mean by this is that when a fresh kamailio (5.8) is started
>     up (with -m 7, for low shared memory availability to try and
>     replicate the issue and children=2) and then check free shared
>     memory usage using `kamcmd core.shmmem` is around 2196096 (bytes i
>     am assuming) for my system. 
>
>      
>
>     On the first call of tls.reload, it drops to 539248. That's a
>     heavy drop so i started digging why on so much allocation is
>     caused. When loading a tls configuration, ksr_fix_domain
>     
> <https://github.com/kamailio/kamailio/blob/9c2705b566103f4fad0cad63bc1e36ba3cca621f/src/modules/tls/tls_domain.c#L1071>
>  allocates
>     a new SSL_CTX per process. From what i am seeing this SSL_CTX, is
>     basically the same for each one, with same configuration without
>     any difference on settings.
>
>      
>
>     So, what i tried is to allocated it once (see tls_reload branch in
>     my repo
>     
> <https://github.com/kamailio/kamailio/compare/master...xkaraman:kamailio:tls_reload>),
>     and just share this context to all of the process and the memory
>     used is way less and also the unbounding memory seems to fixed or
>     at least it's slowed that's barely visible.
>
>      
>
>     What are your thoughts on these? Is this something we can done? Is
>     the assumption that tls config will and be the same for every
>     process or can one somehow differentiate from another?
>
>      
>
>     Thanks,
>
>     Xenofon
>
>      
>
>     Some numbers for anyone interested:
>
>      
>
>     *Before the patch 5.8 branch* and with settings such as -m 7
>     (shared memory) and children=2 (with children=8 it doesn't even
>     start, failed to load cyphers in SSL_CTX):
>
>     Fresh kamailio start shared memory:          total: 7340032
>
>                                                        free:  2196096
>
>      
>
>     After one tls.reload:                           free:   539248
>
>     After 100 tls.reload:                         free:    483776
>
>                                                  
>
>      
>
>     *After patch on master* (kamailio -m 7 and children=2) (with
>     children=8 it starts normally): 
>
>     Fresh kamailio start shared memory:          total: 7340032
>
>                                                        free:  3772000
>
>      
>
>     After one tls.reload:                            free:  3690192
>
>     After 100 tls.reload:                            free:  3681056
>
>                                              
>
>     Image removed by sender.
>     
> <https://github.com/kamailio/kamailio/compare/master...xkaraman:kamailio:tls_reload>
>
>       
>
>     Comparing kamailio:master...xkaraman:tls_reload ·
>     kamailio/kamailio
>     
> <https://github.com/kamailio/kamailio/compare/master...xkaraman:kamailio:tls_reload>
>
>     Kamailio - The Open Source SIP Server for large VoIP and real-time
>     communication platforms - - Comparing
>     kamailio:master...xkaraman:tls_reload · kamailio/kamailio
>
>     github.com
>
>      
>
>     Image removed by sender.
>     
> <https://github.com/xkaraman/kamailio/blob/9c2705b566103f4fad0cad63bc1e36ba3cca621f/src/modules/tls/tls_domain.c#L1077>
>
>       
>
>     kamailio/src/modules/tls/tls_domain.c at
>     9c2705b566103f4fad0cad63bc1e36ba3cca621f · xkaraman/kamailio
>     
> <https://github.com/xkaraman/kamailio/blob/9c2705b566103f4fad0cad63bc1e36ba3cca621f/src/modules/tls/tls_domain.c#L1077>
>
>     Kamailio - The Open Source SIP Server for large VoIP and real-time
>     communication platforms - - xkaraman/kamailio
>
>     github.com
>
>      
>
>     Image removed by sender.
>     
> <https://github.com/kamailio/kamailio/blob/9c2705b566103f4fad0cad63bc1e36ba3cca621f/src/modules/tls/tls_domain.c#L674-L679>
>
>       
>
>     kamailio/src/modules/tls/tls_domain.c at
>     9c2705b566103f4fad0cad63bc1e36ba3cca621f · kamailio/kamailio
>     
> <https://github.com/kamailio/kamailio/blob/9c2705b566103f4fad0cad63bc1e36ba3cca621f/src/modules/tls/tls_domain.c#L674-L679>
>
>     Kamailio - The Open Source SIP Server for large VoIP and real-time
>     communication platforms - - kamailio/kamailio
>
>     github.com
>
>      
>
>     Image removed by sender.
>     <https://github.com/kamailio/kamailio/issues/3823>
>
>       
>
>     Memory usage increases everytime tls.reload is executed · Issue
>     #3823 · kamailio/kamailio
>     <https://github.com/kamailio/kamailio/issues/3823>
>
>     Description We are using Kamailio 5.7.4 on Debian 12 (from
>     http://deb.kamailio.org/kamailio57) with rtpengine as an Edgeproxy
>     for our clients. The instance terminates SIP/TLS (with
>     Cliencertificate...
>
>     github.com
>
>      
>
>
>
>     _______________________________________________
>
>     Kamailio (SER) - Development Mailing List
>
>     To unsubscribe send an email to sr-dev-le...@lists.kamailio.org
>
> -- 
> Daniel-Constantin Mierla (@ asipto.com)
> twitter.com/miconda -- linkedin.com/in/miconda
> Kamailio Consultancy, Training and Development Services -- asipto.com

-- 
Daniel-Constantin Mierla (@ asipto.com)
twitter.com/miconda -- linkedin.com/in/miconda
Kamailio Consultancy, Training and Development Services -- asipto.com
_______________________________________________
Kamailio (SER) - Development Mailing List
To unsubscribe send an email to sr-dev-le...@lists.kamailio.org

Reply via email to