Apparent CML memory leak
"John Stark" <[email protected]> Thu, 30 May 2002 11:12:20 +0100
| Newsgroups | gmane.ietf.sfl |
|---|---|
| Organization | Metanate Ltd |
| Message-ID | <00a801c207c2$7c1f9690$0200a8c0@slugvine> |
Hello I'm trying to track down two memory leaks that appear to be occurring in our application within the CM_RetrieveKey function in the Certificate Management Library version 2.0.1. We are testing with Rational Purify on a Solaris SPARC system. The code in our application does the following: ValidKey_struct *vkp; Bytes_struct *bsp; ulong cmlsid; short cme; unsigned char *cert_data; ... cme = CM_RequestEncCertPath(cmlsid, cert_data, CM_SEARCH_UNTIL_FOUND, &bsp); cme = CM_RetrieveKey(cmlsid, bsp->data, CM_CERTPATH_TYPE, &vkp, CM_SEARCH_UNTIL_FOUND); ... CM_FreeValidKey(cmlsid, &vkp); CM_FreeBytes(cmlsid, &bsp); When this code is invoked, two memory leaks occur with the following call stacks (which unfortunately don't give me line numbers): MLK: 310 bytes leaked in 2 blocks * This memory was allocated from: malloc [rtlib.o] CMU_CopyBytesContent [CM_RetrieveKey.cpp] short buildCrlListFmObject(EncCRL_LL**,EncObject_LL*) [libcmapi_d.so] CM_RequestCRLs [CM_ReqOps.cpp] short checkCRLSearchResults(unsigned long,Cert_struct*,int,char*,EncCRL_LL*,Bytes_struct**,CRL_struct**) [libcmapi_d.so] short getValidCRL(unsigned long,CertTree_LL*,EncCRL_LL*,SearchBounds,bool,CRL_struct**,CertType) [libcmapi_d.so] short findValidCRL(unsigned long,CertTree_LL*,CertType,dist_pts_LL*,unsigned short,SearchBounds,bool,CRL_struct**) [libcmapi_d.so] short checkRevokeStatus(unsigned long,CertTree_LL*,SearchBounds) [libcmapi_d.so] short validateCert(unsigned long,SearchBounds,CertTree_LL*,StateVariables*) [libcmapi_d.so] short CMI::ValidatePath(unsigned long,SearchBounds,CertTree_LL*,CML::ValidatedKey*) [CM_RetrieveKey.cpp] short CML::CertPath::Validate(CML::ValidatedKey*)const [CM_CertPath.cpp] short CML::CertPath::BuildAndValidate(unsigned long,SearchBounds,float,CML::ValidatedKey*) [CM_CertPath.cpp] CM_RetrievePath [CM_RetrieveKey.cpp] CM_RetrieveKey [CM_RetrieveKey.cpp] ... MLK: 24 bytes leaked in 2 blocks * This memory was allocated from: malloc [rtlib.o] calloc [rtlib.o] short buildCrlListFmObject(EncCRL_LL**,EncObject_LL*) [libcmapi_d.so] CM_RequestCRLs [CM_ReqOps.cpp] short checkCRLSearchResults(unsigned long,Cert_struct*,int,char*,EncCRL_LL*,Bytes_struct**,CRL_struct**) [libcmapi_d.so] short getValidCRL(unsigned long,CertTree_LL*,EncCRL_LL*,SearchBounds,bool,CRL_struct**,CertType) [libcmapi_d.so] short findValidCRL(unsigned long,CertTree_LL*,CertType,dist_pts_LL*,unsigned short,SearchBounds,bool,CRL_struct**) [libcmapi_d.so] short checkRevokeStatus(unsigned long,CertTree_LL*,SearchBounds) [libcmapi_d.so] short validateCert(unsigned long,SearchBounds,CertTree_LL*,StateVariables*) [libcmapi_d.so] short CMI::ValidatePath(unsigned long,SearchBounds,CertTree_LL*,CML::ValidatedKey*) [CM_RetrieveKey.cpp] short CML::CertPath::Validate(CML::ValidatedKey*)const [CM_CertPath.cpp] short CML::CertPath::BuildAndValidate(unsigned long,SearchBounds,float,CML::ValidatedKey*) [CM_CertPath.cpp] CM_RetrievePath [CM_RetrieveKey.cpp] CM_RetrieveKey [CM_RetrieveKey.cpp] ... Can anyone tell me where this problem lies, or provide a fix for it already? Obviously it's building a linked list of CRLs, but on looking at the code it wasn't immediately obvious where it needs to be freed. John Stark E-mail: [email protected] Tel: +44 (0) 1223 566732 Fax: +44 (0) 1223 566727 Mobile: +44 (0) 7968 110628