[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Apparent CML memory leak



John:
We will analyze your problem and get back to you on it.

Thanks
Tex


> -----Original Message-----
> From: John Stark [mailto:jas@xxxxxxxxxxxx] 
> Sent: Thursday, May 30, 2002 6:12 AM
> To: imc-cml@xxxxxxx; imc-sfl@xxxxxxx
> Subject: Apparent CML memory leak
> 
> 
> 
> 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: jas@xxxxxxxxxxxx
> Tel: +44 (0) 1223 566732
> Fax: +44 (0) 1223 566727
> Mobile: +44 (0) 7968 110628
> 
>