Thanks a lot David for the detailed explanation. I am analyzing our code
now. our functions is shown below. pls check if you can quickly find any
mistake there.

int testParseKeystore
   (
      const char     *keyStoreFilePath,
      const char     *password,
      EVP_PKEY       **priKey,
      X509           **cert,
      STACK_OF(X509) **ca
   )
{
   FILE *fp = NULL;
   PKCS12 *p12 = NULL;

   OpenSSL_add_all_algorithms();
   loadOpenSSLCryptoErrorStrings();

   /* first read the keystore. */
   if ((fp = fopen(keyStoreFilePath, "rb")) == NULL)
   {
      printf("Failed to open key store file : %s.\n", keyStoreFilePath);
      return -1;
   }

   p12 = d2i_PKCS12_fp(fp, NULL);
   fclose(fp);

   if (p12 == NULL)
   {
      printf("Failed to get certificate file from location: %s \n
Error:%s\n",
                     keyStoreFilePath, ERR_error_string(ERR_get_error(),
NULL));
      return -1;
   }

   /* get the private key and the certificate */
   if (!PKCS12_parse(p12, password, priKey, cert, ca))
   {
      printf("Failed parsing key store file from location: %s \n
Error:%s\n",
                     keyStoreFilePath, ERR_error_string(ERR_get_error(),
NULL));
      return -1;
   }

   if (priKey != NULL && *priKey == NULL)
   {
      printf("Failed  to extract private key from keystore location: %s \n
Error:%s\n",
                     keyStoreFilePath, ERR_error_string(ERR_get_error(),
NULL));
      return -1;
   }

   if (cert != NULL && *cert == NULL)
   {
      printf("Failed  to extract certificate from keystore: %s \n
Error:%s\n",
                     keyStoreFilePath, ERR_error_string(ERR_get_error(),
NULL));
      return -1;
   }

   PKCS12_free(p12);
   return 0;
}


On a same note will functions like  CRYPTO_malloc_init() and
CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON) help me in any way to analyse the
issue?

-Thanks and Regards,
-Sanjith.

On Wed, Aug 13, 2008 at 4:38 AM, David Schwartz <[EMAIL PROTECTED]>wrote:

>
> > hi all,
> > We are using openssl 0.9.8g with our product and everything
> > worked fine till now. We are now trying to check memory leak
> > in our code using Purify. But unfortunately our executable core
> > dumped soon after it called PKCS12_parse(). I have attached the
> > entire purify log file. please let me know what am missing here.
>
> >-Thanks and Regards,
> >-Sanjith.
>
> It looks like purify found a bug in your code. You need to debug it. The
> log
> says:
>
> MSE: Memory segment error:
>        DES_ofb64_encrypt [libcrypto.a]
>        des_ede_cbc_cipher [e_des3.c]
>        EVP_EncryptUpdate [libcrypto.a]
>        EVP_CipherUpdate [libcrypto.a]
>        PKCS12_pbe_crypt [libcrypto.a]
>        PKCS12_item_decrypt_d2i [libcrypto.a]
>        parse_bag      [p12_kiss.c]
>        parse_bags     [p12_kiss.c]
>        PKCS12_parse   [libcrypto.a]
>        testParseKeystore [zuopenssl.c:265]
>        testGetLocalHostPrivateKeyFromKeystore [zuopenssl.c:398]
>
> So your code called PKCS12_parse which eventually called a DES function
> with
> a bad pointer. Most likely, this is because there is someting wrong with
> the
> PKCS12 structure you passed to PKCS12_parse, but there's no way for us to
> tell.
>
> At least, that would be the most obvious explanation. It could always be
> something weirder. We can't debug the code in zuopenssl.c without being
> able
> to see it.
>
> You have gotten the first piece of evidence that there is something wrong
> with your code. So start debugging it.
>
> There are a large family of bugs that are almost always harmless in release
> builds but fatal in some kinds of debug builds. For example, if you
> allocate
> 121 bytes of memory but write 122 bytes, a release build will almost always
> wind up actually allocating at least 122 bytes, so the overwrite will be
> harmless. A debug build tries to consider any write to memory that was
> never
> allocated fatal -- since it's never something you're supposed to do.
>
> You have likely encountered a bug in that family of bugs. Almost always
> harmless in release, possibly fatal in special debug builds. Find it, and
> fix it. If it's of the "always harmless" variety, then your code will just
> be nicer. If it's of the "almost always harmless" variety, then finding and
> fixing it may well prevent rare, hard-to-debug crashes in your release
> code.
>
> It could also turn out to be a bug in OpenSSL. If you suspect this, try to
> provide a compact example program that replicates this problem, and post it
> to the list. (Or debug it yourself if you can.) But start out checking the
> code right before the call to PKCS12_parse. There's at least a 80% chance
> that's where the problem is.
>
> DS
>
>
> ______________________________________________________________________
> OpenSSL Project                                 http://www.openssl.org
> User Support Mailing List                    openssl-users@openssl.org
> Automated List Manager                           [EMAIL PROTECTED]
>

Reply via email to