I think you may call the function [X509 *SSL_get_peer_certificate(const SSL *s)] to get a peer's certificate, but you have freed this certificate.SSL_get_peer_certificate will increase the reference count of this certificate and finally you will find that you haven't freed this certificate's memory.Call X509_free after you have used the certificate that ssl feeds.
At 2012-02-18 05:25:55,"Botond Botyanszki" <b...@siliconium.net> wrote: >Hi, > >I'm experiencing a memory leak in my server code using openssl 1.0.0g >when a client with a self-signed cert tries to connect and is refused. >Valgrind's massif traces this back to ssl3_get_client_certificate() >at s3_srvr.c:2956, such as the following: > >| ->10.77% (4,116,792B) 0x5364BC3: asn1_item_ex_combine_new (tasn_new.c:191) >| | ->08.39% (3,206,136B) 0x5367605: ASN1_item_ex_d2i (tasn_dec.c:400) >| | | ->05.81% (2,219,640B) 0x5367B3F: asn1_template_noexp_d2i (tasn_dec.c:706) >| | | | ->04.47% (1,707,408B) 0x5367EEA: asn1_template_ex_d2i (tasn_dec.c:607) >| | | | | ->04.47% (1,707,408B) 0x536773B: ASN1_item_ex_d2i (tasn_dec.c:195) >| | | | | ->04.47% (1,707,408B) 0x5367B3F: asn1_template_noexp_d2i >(tasn_dec.c:706) >| | | | | ->04.47% (1,707,408B) 0x5367EEA: asn1_template_ex_d2i >(tasn_dec.c:607) >| | | | | ->04.47% (1,707,408B) 0x536773B: ASN1_item_ex_d2i >(tasn_dec.c:195) >| | | | | ->04.47% (1,707,408B) 0x53607D3: x509_name_ex_d2i >(x_name.c:186) >| | | | | ->04.47% (1,707,408B) 0x5367051: ASN1_item_ex_d2i >(tasn_dec.c:239) >| | | | | ->04.47% (1,707,264B) 0x5367C8F: asn1_template_noexp_d2i >(tasn_dec.c:746) >| | | | | | ->03.57% (1,365,984B) 0x5367EEA: asn1_template_ex_d2i >(tasn_dec.c:607) >| | | | | | | ->03.57% (1,365,984B) 0x5367342: ASN1_item_ex_d2i >(tasn_dec.c:448) >| | | | | | | ->03.57% (1,365,984B) 0x5367C8F: >asn1_template_noexp_d2i (tasn_dec.c:746) >| | | | | | | ->03.57% (1,365,984B) 0x5367EEA: >asn1_template_ex_d2i (tasn_dec.c:607) >| | | | | | | ->03.57% (1,365,984B) 0x5367342: >ASN1_item_ex_d2i (tasn_dec.c:448) >| | | | | | | ->03.57% (1,365,984B) 0x5368022: >ASN1_item_d2i (tasn_dec.c:136) >| | | | | | | ->03.57% (1,364,544B) 0x587AF12: >ssl3_get_client_certificate (s3_srvr.c:2956) >| | | | | | | | ->03.57% (1,364,544B) 0x587C206: >ssl3_accept (s3_srvr.c:519) >| | | | | | | | ->03.57% (1,364,544B) 0x5885D80: >ssl3_read_bytes (s3_pkt.c:941) >| | | | | | | | ->03.57% (1,364,544B) 0x5882AC8: >ssl3_read (s3_lib.c:3274) > >After the disconnection I'm calling SSL_free() and SSL_CTX_free() but it >looks like the X509 structures allocated by ssl3_get_client_certificate() >are still leaked. Do I need to call something in addition in order to >have this freed? Otherwise I suspect that this is a leak in openssl. > >Regards, >Botond >______________________________________________________________________ >OpenSSL Project http://www.openssl.org >User Support Mailing List openssl-users@openssl.org >Automated List Manager majord...@openssl.org